2017.10.27
被整数越界的问题困扰了好久,以后一定要记得这种很大的数相乘会出现越界的情况。
public class Solution {
/**
* @param n a positive integer
* @param primes the given prime list
* @return the nth super ugly number
*/
public int nthSuperUglyNumber(int n, int[] primes) {
// Write your code here
if(primes.length == 0){
return 2147483647;
}
if(n <= 0){
return 0;
}
int[] ugly = new int[n];
ugly[0] = 1;
for(int i = 1; i < n; i++){
//求得下一个数
int tmp = Integer.MAX_VALUE;
for(int k = 0; k < i ;k++){
for(int j : primes){
if(Integer.MAX_VALUE/j < ugly[k]){
continue;
}//这里会存在越界的问题,然后就不对了。所以需要简单的判断一下
if(j*ugly[k] > ugly[i-1]){
tmp = Math.min(tmp,j*ugly[k]);
}
}
}
ugly[i] = tmp;
}
return ugly[n-1];
}
}