劍指Offer 面試題49 醜數

2022-08-29 16:48:22 字數 723 閱讀 3672

我們把只包含因子 2、3 和 5 的數稱作醜數(ugly number)。求按從小到大的順序的第 n 個醜數。

示例:

輸入: n = 10

輸出: 12

解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。

說明:

依次判斷每個數是否是醜數。

class solution 

return num;

}// 判斷是否是醜數

bool isugly(int num)

};

利用醜數性質:每個醜數是前面某個醜數乘以2或3或5得到的。

關鍵在於如何取得下乙個醜數,對於已經存在的醜數,存在乙個位置i使得,i位置前所有醜數乘以2都在當前已經儲存的醜數中,i位置及之後的醜數乘以2還沒有儲存,同樣也分別存在乙個位置使得之前所有醜數乘以3(乘以5)都已經在儲存的醜數中,其後的醜數還沒有儲存,我們用i2,i3和i5分別表示這三個位置,那麼下乙個醜數即為這三個位置醜數分別乘以2,3和5中最小值。每次找到下乙個醜數後,更新i2,i3和i5的位置。

時間複雜度:o(n)

空間複雜度:o(n)

class solution 

return num[next - 1];

}int min(int n1, int n2, int n3)

};

劍指offer 面試題49 醜數

我們把只包含因子2 3 和 5 的數稱作醜數 ugly number 求按照從小到大的順序的第1500個醜數。例如,6 8都是醜數,但是14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。有空再補上 public class 49 uglynumber return uglynumbers i...

《劍指offer》面試題49 醜數

設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12 思路 思路1 從1開始遞增,依次判斷每個數是否是醜數,不夠高效 思路2 思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數 因...

劍指offer 面試題49 醜數

面試題 劍指offer 題目解答 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...