丑数
2016-05-14 13:38
190 查看
题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:
1)初始化三个队列,和存放结果的min变量
2)将1先插入队列1中
3 ) 令x为三个队列中的最小值
4)若x存在于:
队列1:将 x * 2、x * 3、x*5 分别放入三个队列,从 队列1中移除x
队列2:将 x * 3、x*5 分别放入 队列2,3中,从 队列2中移除x
队列3:将 x * 5放入 队列3,从队列3中移除x
5)重复步骤3~5,知道找到第index个元素
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:
1)初始化三个队列,和存放结果的min变量
2)将1先插入队列1中
3 ) 令x为三个队列中的最小值
4)若x存在于:
队列1:将 x * 2、x * 3、x*5 分别放入三个队列,从 队列1中移除x
队列2:将 x * 3、x*5 分别放入 队列2,3中,从 队列2中移除x
队列3:将 x * 5放入 队列3,从队列3中移除x
5)重复步骤3~5,知道找到第index个元素
import java.util.ArrayDeque; import java.util.Scanner; public class GetUglyNumber { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("input index:"); int index = scanner.nextInt(); System.out.println("The " + index + "th UglyNumber is:" + GetUglyNumber_Solution(index)); } public static int GetUglyNumber_Solution(int index){ if(index < 1){ return 0; } ArrayDeque<Integer> deque1 = new ArrayDeque<Integer>(); ArrayDeque<Integer> deque2 = new ArrayDeque<Integer>(); ArrayDeque<Integer> deque3 = new ArrayDeque<Integer>(); int min = 0; deque1.add(1); for(int i=0;i<index;i++){ int minDeque1 = deque1.isEmpty() ? Integer.MAX_VALUE : deque1.peek(); int minDeque2 = deque2.isEmpty() ? Integer.MAX_VALUE : deque2.peek(); int minDeque3 = deque3.isEmpty() ? Integer.MAX_VALUE : deque3.peek(); min = Math.min(minDeque3, Math.min(minDeque1, minDeque2)); if(min == minDeque1){ deque1.add(2*min); deque2.add(3*min); deque3.add(5*min); deque1.poll(); } else if(min == minDeque2){ deque2.add(3*min); deque3.add(5*min); deque2.poll(); } else{ deque3.add(5*min); deque3.poll(); } } return min; } }
相关文章推荐
- Ugly Number
- [C++]Ugly Number 丑数
- [C++]Ugly Number II丑数2
- 丑数(剑指offer)
- 【剑指Offer面试编程题】题目1214:丑数--九度OJ
- 【剑指offer】丑数
- 编程算法 - 丑数 代码(C)
- 寻找丑数
- POJ2545-丑数
- 寻找丑数(Ugly Number)
- 剑指offer的34题 丑数
- 算法习题64:寻找丑数2 3 5的倍数
- 程序员面试题精选100题(37)-寻找丑数[算法]
- 算法分析---寻找丑数
- Leetcode: Ugly Number II
- 【九度OJ1214】|【剑指offer34】丑数
- Leetcode264. Ugly Number II JAVA语言
- Leetcode 263. Ugly Number JAVA语言
- 丑数
- 丑数 精简做法