劍指Offer(33) 醜數

2021-09-14 08:26:29 字數 1427 閱讀 8964

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

根據醜數的定義,醜數只能被2、3和5整除。因此乙個醜數是另乙個醜數乘以2、3或者5的結果(1除外)。基於此可以建立乙個陣列,裡面的數字是排好序的醜數,每乙個醜數都是前面的醜數乘以2、3或者5得到的。

思路關鍵在於醜數陣列的排序,可以定義三個指標,比較當前醜數分別乘以2、3和5之後值的大小,只存入最小值並移動對應指標。

例如:醜數陣列:

指標i2=0,1×2=2

指標i3=0,1×3=3

指標i5=0,1×5=5

最小值為2,放入陣列,指標i2++

醜數陣列:

指標i2=12×2=4

指標i3=0,1×3=3

指標i5=0,1×5=5

最小值為3,放入陣列,指標i3++

醜數陣列:

指標i2=1,2×2=4

指標i3=12×3=6

指標i5=0,1×5=5

最小值為4,放入陣列,指標i2++

醜數陣列:

指標i2=23×2=6

指標i3=1,2×3=6

指標i5=0,1×5=5

最小值為5,放入陣列,指標i5++

…直至找到第n個醜數

public

class

solution

int[

] result =

newint

[index]

;// 定義三個指標

int count, i2, i3, i5, temp;

count = i2 = i3 = i5 =0;

result[0]

=1;while

(count < index -1)

if(temp == result[i3]*3

)if(temp == result[i5]*5

) result[

++count]

= temp;

}return result[index -1]

;}}

《劍指offer》33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。c 實現 class solution return a index 1 python實現 coding utf 8 cl...

劍指offer 33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。通俗易懂的解釋 首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,換句話說乙個醜...

劍指offer33 醜數

題目描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。這裡講解的很詳細了。coding utf 8 class solution def getuglynumber ...