题目:
我们把只含有因子2、3、5的数称为丑数。例如6、8都是丑数,而14不是丑数,因为它含有因子7.通常也把1当做丑数。编程求按从小到大的顺序的第N个丑数。注意:使用的算法效率应尽量高。
思路:
法一:暴力穷举 (不推荐)
判断一个数字是不是丑数,先让这个数除以2,知道不能整除,再除以3直到不能整除,再除以5,知道不能整除。最后这个数如果是1,那这个数就是丑数,否则不是丑数。 这个思路很好理解,一个一个的遍历判断就可以。但是计算量比较大,复杂度高。
法二:
import java.util.ArrayList; public class Solution { public int GetUglyNumber_Solution(int index) { if(index < 0) return -1; // 0-6的丑数分别为0-6 if(index < 7) return index; ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); //p2,p3,p5分别为三个队列的指针, int p2 = 0, p3 = 0, p5 = 0; while(list.size() < index){ int m2 = list.get(p2) * 2; int m3 = list.get(p3) * 3; int m5 = list.get(p5) * 5; int min = Math.min(m2, Math.min(m3, m5)); list.add(min); if(min==m2) p2++; if(min==m3) p3++; if(min==m5) p5++; } return list.get(list.size()-1); } }
原文:https://www.cnblogs.com/lisen10/p/11484722.html