【剑指offer】33.丑数

题目

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

分析

简单分析下1-6都是丑数,因此在N小于7时,直接返回N就可以了。当N大于等于7之后,依次按照丑数定义穷举每个丑数。

github链接:JZ33-丑数


C++ AC代码

#include 
#include 
#include 
using namespace std;

class Solution {
	public:
		int GetUglyNumber_Solution(int index) {
			if(index < 7) {
				return index;
			}
			vector<int> ans(index);
			ans[0] = 1;
			int t2 = 0,t3 = 0,t5 = 0;
			for(int i = 1 ; i < index ; i++) {
				ans[i] = min(ans[t2] * 2,min(ans[t3]*3,ans[t5] * 5));
				if(ans[t2] * 2 == ans[i]){
					t2++;	
				}
				if(ans[t3] * 3 == ans[i]){
					t3++;	
				}
				if(ans[t5] * 5 == ans[i]){
					t5++;	
				}
			}
			return ans[index-1];	
		}
};

int main() {
	int n;
	while(cin>>n) {
		Solution s;
		cout<<s.GetUglyNumber_Solution(n);
	}

	return 0;
}

你可能感兴趣的:(#,剑指offer题解)