最笨的办法,没有任何技术含量。。。。
丑数
http://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b
题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
适用与拿到这道题没有任何思路的朋友,大佬轻喷😅
一个丑数肯定会被分解成为 2×m*3*n*5*l的形式,所以新的丑数都是通过一个现有的丑数×2、×3 或者×5得到的,题目的意思是找第n个满足条件的丑数。
如果通过1 与 {2,3,5} 相乘,再用得到的乘积继续与{2,3,5}相乘, 直接生成n多个丑数,放到数组里面,然后 返回下标为index - 1的丑数就是答案。
class Solution { public: //用于去重 void func(vector<int>& v) { sort(v.begin(),v.end()); auto it = unique(v.begin(),v.end()); v.erase(it,v.end()); } int GetUglyNumber_Solution(int index) { int nums[3] = {2,3,5}; vector<int> res = {1}; int max = 0; for(int i = 0; i < index; i++) { //每次生成新3个新的丑数,可能会与之前的重复,所以要进行去重。 for(int j = 0; j < 3; j++) { res.push_back(nums[j] * res[i]); } func(res); } //因为可能会出现超出int范围,所以需要把超出范围的负数排除 auto it = res.begin(); while(*it < 0) { it ++; } res.erase(res.begin(),it); return res[index - 1]; } };