劍指Offer 醜數Java Python

2021-09-21 00:28:00 字數 1336 閱讀 1061

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

如果p是醜數,則p=2

x∗3y

∗5

zp=2^x * 3^y * 5^z

p=2x∗3

y∗5z

,所以給x,y,z不同的值,就得到不同的醜數。

用動態規劃:

1.初始化乙個列表ans

ansan

s用來裝前n

nn個醜數,索引為0的醜數是1。

2.初始化3個指標,i2,

i3,i

5i2,i3,i5

i2,i3,

i5,分別指向最開始的醜數的索引0,那麼下乙個醜數就是i2,

,i3,

i5

i2,,i3,i5

i2,,i3

,i5指向的醜數ans

[i2]

,ans

[i3]

,ans

[i5]

ans[i2],ans[i3], ans[i5]

ans[i2

],an

s[i3

],an

s[i5

],分別乘以2,3

,5

2,3,5

2,3,

5得到的最小的值,然後將得到最小值的指標向右移動一位。

public class solution 

return result[index-1];

}private int min3(int a, int b, int c)

}

# -*- coding:utf-8 -*-

class solution:

def getuglynumber_solution(self, index):

if index<=0:

return 0

ans = [0] * index

ans[0] = 1

i2,i3,i5 = 0,0,0

for i in range(1, index):

m = min(ans[i2]*2, min(ans[i3]*3, ans[i5]*5))

ans[i] = m

if m == ans[i2]*2:

i2 += 1

if m == ans[i3]*3:

i3 += 1

if m == ans[i5]*5:

i5 += 1

return ans[index-1]

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...

劍指Offer 醜數

我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...