Ugly Number II

ugly number:

一个数的的素因数只有2,3,5,其中1是ugly number。

这道题要求找到第n个ugly number。

思路如下:

第一个是1,

以后的数要求与2,3,5相乘找到其中的最小的值,将其存在数组num中

例如:

l2=l3=l5=0;都对应第一个数num[0]。

n=4, 第一个元素1分别与2,3,5相乘,得到2,3,5,将2存在数组中num[1]=2;l2++,指向num[1];

下次将1与3,5相乘,2与2相乘,得到最小值3,存在数组中num[2]=3,l3++,指向num[1];

一直进行n-1次。


其中在判断是乘哪个得到的最小值,要进行if();if();if()判断而不是if() else if。

这是因为当num有 1,2,3,4,5,6时,l2=2指向3,l3=l5=1指向2。这时num[l2]*2==num[l3]*3,这个需要同时对l2++,l3++。

代码如下:


class Solution{
	public:
		int nthUglyNumber(int n){
			vector<int> num(1,1);
			int m,l2=0,l3=0,l5=0;
			if(n==1) return 1;
			n--;
			cout<<num.back()<<endl;
			while(n){
				m=min(num[l2]*2,min(num[l3]*3,num[l5]*5));
				num.push_back(m);
				cout<<n<<" "<<num.back()<<" "<<l2<<" "<<l3<<" "<<l5<<endl;
				n--;
				if(num[l2]*2==m) l2++;
				if(num[l3]*3==m) l3++;
				if(num[l5]*5==m) l5++;
			}
			return m;
		}
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值