https://leetcode.com/problems/ugly-number-ii/description/
LC原题,我有一个疑问:
对于LC来说,解法2所有数据类型是int就行,而解法1必须要long long才可以过,为什么呢?
// 解法1
int getUglyNumber(int n) {
priority_queue<long long,vector<long long>,greater<long long>> p;
p.push(1);
long long pre=0;
for(int i=1;i<=n;i++){
auto t=p.top();
// cout<<pre<<" "<<t<<endl;
p.pop();
if(t==pre){
i--;
continue;
}
pre=t;
p.push(2*t);
p.push(3*t);
p.push(5*t);
}
return pre;
}
// 解法2
int getUglyNumber1(int n) {
int p1=0,p2=0,p3=0;
vector<int> vec;
vec.push_back(1);
int minv;
while((int)vec.size()+1<=n){
minv=min(vec[p1]*2,min(vec[p2]*3,vec[p3]*5));
if(vec[p1]*2==minv) p1++;
if(vec[p2]*3==minv) p2++;
if(vec[p3]*5==minv) p3++;
vec.push_back(minv);
}
return vec.back();
}
LC原题,我有一个疑问:
对于LC来说,解法2所有数据类型是int就行,而解法1必须要long long才可以过,为什么呢?
是因为n太长会爆么?
n==1407就会爆掉,但是我不明白的是这两个方法区别在哪里,为什么一个爆掉,另一个就没有爆掉?