LintCode-4.丑數 II

題目

描述

設計一個算法,找出只含素因子235 的第 n 大的數。
符合條件的數如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

樣例

如果n = 9, 返回 10

解答

思路

任何丑數都可以表示為:i^2 * j^3 * k^5;后一個丑數等于前面某個丑數乘以2或3或5:

  1. 定義一個大小為n的數組u[n]用來存儲有序丑數序列。
  2. 三個游標u2,u3,u5分別表示乘以2或3或5取得過最新丑數。
  3. 下一個丑數等于min(u[u2]*2, u[u3]*3, u[u5]*5),并根據因子對u2或u3或u5遞增。

代碼

class Solution {
    /**
     * @param n an integer
     * @return the nth prime number as description.
     */
    public int nthUglyNumber(int n) {
        // Write your code here
        int[] u = new int[n];
        u[0] = 1;
        int u2 = 0,u3 = 0, u5 = 0;
        for(int i = 1; i < n; i++){
            u[i] = min(min(u[u2]*2,u[u3]*3),u[u5]*5);
            if((u[i]/u[u2]) == 2) u2++;
            if((u[i]/u[u3]) == 3) u3++;
            if((u[i]/u[u5]) == 5) u5++;
        }
        return u[n-1];
    }
    public int min(int a, int b){
        return a < b ? a : b;
    }
};

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容