丑数
题目
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
分析
如何对每个数字进行丑数的判断,时间复杂度将会非常大,所以我们要从其他角度进行考虑。
使用ArrayList<Integer> list去存储丑数,当list.size()小于index时,从list的第一个元素开始乘以2,直到所得结果大于list中的最后一个元素,即为x;从list的第一个元素开始乘以3,直到所得结果大于list中的最后一个元素,即为y;从list的第一个元素开始乘以5,直到所得结果大于list中的最后一个元素,即为z。然后找出x、y、z中最小的元素加入list中。
代码
1 public int min(int x, int y, int z){ 2 int temp = (x<y)? x:y; 3 return (temp<z)? temp:z; 4 } 5 6 public int GetUglyNumber_Solution(int index){ 7 if(index==0) 8 return 0; 9 ArrayList<Integer> list = new ArrayList<Integer>(); 10 list.add(1); 11 int a = 2, b = 3, c = 5; 12 int x = 0, y = 0, z = 0; 13 while(list.size() != index){ 14 int temp = list.get(list.size()-1); 15 int i = 0, j = 0, k =0; 16 while(temp>=list.get(i)*a){ 17 i++; 18 } 19 x = list.get(i)*a; 20 while(temp>=list.get(j)*b){ 21 j++; 22 } 23 y = list.get(j)*b; 24 while(temp>=list.get(k)*c){ 25 k++; 26 } 27 z = list.get(k)*c; 28 list.add(min(x, y, z)); 29 } 30 return list.get(list.size()-1); 31 }
posted on 2017-06-06 12:42 一个不会coding的girl 阅读(345) 评论(0) 编辑 收藏 举报