設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12…
思路:思路1:從1開始遞增,依次判斷每個數是否是醜數,不夠高效;
思路2:思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數:因為每個醜數都可以看成是由1去乘以2、3、5,再乘以2、3、5而衍生出來的。可以用三個指標指向第乙個醜數1,三個指標分別表示乘2,乘3,乘5,將三個指標計算出來的最小的醜數放在陣列中,並將該指標向後移動乙個位置。為了得到第1500個醜數,需要乙個長度1500的陣列來記錄已經計算出來的醜數。因此這個思路也可以說是用空間換時間。
public class getuglynumber_solution {
//思路一:判斷每個數是否是醜數
public static int getuglynumber(int num){
if(num<=0)
return 0;
int number = 0,uglyfound = 0;
while (uglyfound測試用例:
a.功能測試(輸入2,3,4,5,6等)。
b.特殊輸入測試(邊界值1;無效輸入0)。
c.效能測試(輸入較大的數字,如1500)。
參考:
劍指offer 面試題49 醜數
我們把只包含因子2 3 和 5 的數稱作醜數 ugly number 求按照從小到大的順序的第1500個醜數。例如,6 8都是醜數,但是14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。有空再補上 public class 49 uglynumber return uglynumbers i...
劍指offer 面試題49 醜數
面試題 劍指offer 題目解答 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...
劍指offer 面試題49 醜數
題目描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。通俗易懂的解釋 首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,xy...