剑指offer 49 丑数
2020-07-09 10:19
316 查看
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
解:对于这道题的理解;这里的质因子指的是一个数的约数,并且是质数;把一个合数写成几个质因数的乘积的形式,即求质因数的过程叫做分解质因数;
任何一个丑数都是由小于它的某一个丑数2,3,5,得到的,如何得到所有的丑数?
现在假设由三个数组:分别是:
A:{12,22,32,42,52,62…};
B:{13,23,33,43,53,63…};
C:{15,25,35,43,53,6*3…};
所有丑数的排列就是上面的数组合并结果然后去重得到的,就相当于转换成三个有序数组的合并问题;
合并有序数组的比较好的方式就是给每一个数组设置一个指针,然后比较这些指针中所指的哪个数最小,就将这个结果放到这个结果数组中,然后该指针后移一位;
时间复杂度为O(n),空间复杂度为O(n),用来存放丑数
public int nthUglyNuber(int n){ if(n==0) return 0; int[] ugly=new int[n]; ugly[0]=1; int i=0,j=0,k=0; for(int idx=0;idx<n;idx++){ int temp=Math.min(ugly[i]*2,Math.min(ugly[j]*3,ugly[k]*5)); if(temp==ugly[i]*2) i++; if(temp==ugly[j]*3) j++; if(temp==ugly[k]*5) k++; ugly[idx]=temp; } return ugly[n-1]; }
相关文章推荐
- 【剑指offer】面试题 49:丑数
- 【剑指offer】面试题49:丑数
- 牛客剑指Offer面试题49:丑数
- 【Golang】LeetCode-剑指Offer-面试题49-丑数
- 剑指Offer-49:丑数
- 剑指Offer-49 丑数
- 剑指offer题解 丑数
- 【剑指offer】丑数
- 3.8 剑指offer 丑数
- 剑指offer-丑数
- 剑指offer(18)-丑数
- 剑指offer之丑数
- 【剑指Offer】丑数
- (C++)剑指offer-49:把字符串转换成整数(综合)
- 剑指offer-丑数-Java
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 剑指offer-丑数
- 剑指offer-丑数
- 剑指offer-丑数
- 【剑指offer 面试题34】丑数