劍指offer系列之32 醜數

2021-07-11 03:50:37 字數 540 閱讀 5089

題目描述:把只包含因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

思路1:乙個數m是另乙個數n的因子,則n能被m整除,即n % m = 0,根據醜數的定義,醜數只能被2、3、5整除,所以我們可以通過把乙個數一直被三個因子除,這樣最後如果該數變成1的話(因為第乙個醜數是1),就意味著這個數是醜數,但這樣的**時間複雜度太大。

public int getuglynumber_solution(int index)

int number = 0;

int uglyfound = 0;

while(uglyfound < index)

}return

number;

}boolean isugly(int number)

while(number % 3 == 0)

while(number % 5 == 0)

if(number == 1)else

}} 思路2:

劍指offer32 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。題意理解 1.直接法。逐個判斷每個整數是不是醜數的解法,直觀但不夠高效 所謂乙個數m是另乙個數n的因子,是指n能被m整除,...

劍指offer之醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。對於這個問題,最容易想的就是乙個個數進行判斷,如 public static intgetuglynumber int ind...

劍指offer系列 33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。遍歷得出醜數 醜數結構2 x 3 y 5 z 用三個指標p2,p3,p5記錄上次計算醜數的位置 p2 上乙個,乘以2得到的...