LeetCode
来源:互联网 发布:安卓串口助手源码 编辑:程序博客网 时间:2024/05/17 22:10
解题代码:
263. Ugly Number:
class Solution {
public:
bool isUgly(int num) {
if(num<=0)
return false;
while(num%2==0)
num/=2;
while(num%3==0)
num/=3;
while(num%5==0)
num/=5;
if(num==1)
return true;
else
return false;
}
};
264. Ugly NumberII:
class Solution {
public:
int nthUglyNumber(int n) {
vector<int> res(n);
res[0]=1;
int a=0,b=0,c=0;
for(int i=1;i<n;i++){
res[i]=min(min(res[a]*2,res[b]*3),res[c]*5);
while(res[a]*2<=res[i]){
a++;
}
while(res[b]*3<=res[i]){
b++;
}
while(res[c]*5<=res[i]){
c++;
}
}
return res[n-1];
}
};
313. Super UglyNumber:
class Solution {
public:
int nthSuperUglyNumber(int n,vector<int>& primes) {
vector<int> res(n);
res[0]=1;
vector<int> num(primes.size(),0);
for(int i=1;i<n;i++){
res[i]=INT_MAX;
for(intj=0;j<primes.size();j++){
res[i]=min(res[num[j]]*primes[j],res[i]);
}
for(intj=0;j<primes.size();j++){
while(res[num[j]]*primes[j]<=res[i]){
num[j]++;
}
}
}
return res[n-1];
}
};
解题思路:
这几题都是要找ugly number,因此放在一起。
对于第一题,只需要判断出数字是否ugly number,因此比较简单,只需看所给数字是否只能被2,3,5整除即可。
对于第二题,要找出第n个ugly number,设L[i]为第i个ugly number。这里需要考虑到,对于第i个ugly number(i大于1),它必然等于前面某一个ugly number乘以2,3或5,因此我们分别设三个数a,b,c使得下一个数等于L[a]*2,L[b]*3或 L[c]*5,显然,只能等于它们三个中间最小的一个,并且此时需要更新a,b,c的值使得它们满足能够求出再下一个值。
对于第三题,其实本质跟第二题一样,只是把作为因子的质数的值与数量改变了,因此完全可以按照第二题解法进行求解。
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- 类加载的时机
- 简单的单词个数统计的mapreduce 的代码实现
- 比特币开发知识(如何保障虚拟币钱包的安全)
- 算法---随机数生成
- Intent和IntentFilter的区别详解
- LeetCode
- 鼠标旋转物体脚本
- 自定义Gradle task
- Eclipse工具
- 开源项目合集
- MouseOrbit
- @ResponseBody注解的作用
- x64 win64编译环境下ADO链接Access数据库的问题解决
- Windows未能启动,原因可能是最近更改了硬件或软件,解决此问题的步骤...