1. 程式人生 > >264. Ugly Number II

264. Ugly Number II

color png class exp leetcode tle 解答 i++ ret

一、題目

  1、審題

  技術分享圖片

  2、分析

    輸出第 n 個 ugly 數值。

二、解答

  1、思路

    ①、新建一個大小為 n 的數組 arr,存放自小到大的 ugly 數,且 arr[0] = 1。

    ②、采用三個指針t2、t3、t5,代表 2、3、5的指向,起始分別指向數組下標 0;且 arr[i] = Math.min(arr[t2] * 2 , Math.min(arr[t3] * 3, arr[t5] * 5))。之後對應的最小 ugly 數的指針向右移動一位。

    https://leetcode.com/problems/ugly-number-ii/discuss/69364/My-16ms-C++-DP-solution-with-short-explanation

    public int nthUglyNumber(int n) {
        if(n <= 0)
            return 0;
        int t2 = 0, t3 = 0, t5 = 0;
        int[] arr = new int[n];
        arr[0] = 1;
        for (int i = 1; i < n; i++) {
            arr[i] = Math.min(arr[t2] * 2 , Math.min(arr[t3] * 3, arr[t5] * 5));
            
if(arr[i] == arr[t2] * 2) t2++; if(arr[i] == arr[t3] * 3) t3++; if(arr[i] == arr[t5] * 5) t5++; } return arr[n - 1]; }

264. Ugly Number II