丑数
来源:互联网 发布:人工智能app是什么 编辑:程序博客网 时间:2024/04/30 00:33
- 时间限制:1秒空间限制:32768K
- 通过比例:18.37%
- 最佳记录:0ms|8552K(来自 牛客688826号)
题目描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
标准答案:
class Solution {public:int GetUglyNumber_Solution(int index) {if(index<=0) return 0; int *uglynumbers=new int[index]; uglynumbers[0]=1; int cur=1; int *ugly2=uglynumbers; int *ugly3=uglynumbers; int *ugly5=uglynumbers; while(cur<index){ int minugly=Min(*ugly2*2,*ugly3*3,*ugly5*5); uglynumbers[cur]=minugly; while(*ugly2*2<=uglynumbers[cur]) ugly2++; while(*ugly3*3<=uglynumbers[cur]) ugly3++; while(*ugly5*5<=uglynumbers[cur]) ugly5++; cur++; } int ret=uglynumbers[cur-1]; delete[] uglynumbers; return ret; } int Min(int n1,int n2,int n3){ return min(min(n1,n2),n3); }};
一种超时的算法:
class Solution {public:int GetUglyNumber_Solution(int index) { int n=0; while(index>0){ ++n; if(IsUglyNumber(n)) --index; } return n;} bool IsUglyNumber(int n){ if(1==n) return true; vector<int> decPrime; bool flag=true; for(int i=2;i<=n;++i){ while(n!=i){ if(n%i!=0) break; decPrime.push_back(i); n=n/i; } } decPrime.push_back(n); for(int i=0;i<decPrime.size();++i){ if(decPrime[i]!=1&&decPrime[i]!=2&&decPrime[i]!=3&&decPrime[i]!=5){ flag=false; break; } } return flag; } bool IsUgly(int n){ while(n%2==0) n/=2; while(n%3==0) n/=3; while(n%5==0) n/=5; return n==1?true:false; }};
0 0
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 丑数
- 使用ant编译java项目的简单实例
- SIMCOM推出超高速WCDMA 3G模块SIM5360
- lua关于require和package.loaded 之间的关系
- iOS 枚举类型
- 我们90%的工程师都用你写的软件,但抱歉我们不能聘用你
- 丑数
- Oracle 自动计算合理的数学表达式
- Myclipse发布项目错误问题已解决
- plsql 提示密码即将过期
- firewall 简单使用
- python的sys.stdout重定向
- 配置Nexus仓库,部署构件到Nexus仓库
- 工作流设计流程图
- 《敏捷测试的最佳实践》学习笔记(一)