我們把只包含因子 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個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...