http://zhedahht.blog.163.com/blog/static/2541117420094245366965/
思路:
构造很精美,数学知识还是需要不断积累啊。
本来打算用vector容器存放数字,用迭代器获取元素的时候会产生异常。然后意识到vector容器是动态增长大小的,每一次重新开辟空间都会使以前的迭代器失效。
使用C++的时候细节问题一定要各种注意啊。
#include <iostream> int GetMinOf3(int n1, int n2, int n3) { int ans; if (n1 > n2) ans = n2; else ans = n1; if (ans > n3) ans = n3; return ans; } int GetUglyNumber(int idx) { int *ugly = new int[idx+1]; int *iter2 = ugly; int *iter3 = ugly; int *iter5 = ugly; int cnt = 1; ugly[0] = 1; while (cnt < idx) { int min = GetMinOf3((*iter2)*2, (*iter3)*3, (*iter5)*5); ugly[cnt] = min; while ((*iter2)*2 <= min) ++iter2; while ((*iter3)*3 <= min) ++iter3; while ((*iter5)*5 <= min) ++iter5; ++cnt; } return ugly[idx-1]; } int main() { int n = GetUglyNumber(1500); return 0; }