LeetCode 264--醜數 II ( Ugly Number II ) ( C語言版 )
阿新 • • 發佈:2018-12-09
題目描述 :
當我們去遍歷查詢第n個醜數時 , 則會出現超出時間限制 ;
據觀察可知醜數就相當於三個已排序陣列的合集
1*2 2*2 3*2 4*2 5*2 6*2 8*2 .......'
1*3 2*3 3*3 4*3 5*3 6*3 8*3 .......
1*5 2*5 3*5 4*5 5*5 6*5 8*5 .......
當前醜數都是由上一個醜數乘以質因數得到的 , 那麼下一個醜數就應該是上一個醜數乘以質因數的最小值 ,
程式碼如下 :
int nthUglyNumber(int n) { int num[n]; if(n==1) return 1; num[0]=1; int i=1; int p2=0,p3=0,p5=0; for(;i<n;i++){ //取出醜數乘以質因數後的最小值 int ret=num[p2]*2<num[p3]*3?num[p2]*2:num[p3]*3; ret=ret<num[p5]*5?ret:num[p5]*5; if(ret==num[p2]*2) p2++; if(ret==num[p3]*3) p3++; if(ret==num[p5]*5) p5++; num[i]=ret; } return num[n-1]; }