33醜數 只包含因子2 3和5的數

2022-05-01 02:36:10 字數 1583 閱讀 6263

1 醜數---只包含因子2、3和5的數(根據已知求到結果,再把這個結果當成已知,求下乙個結果)2//

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

5//---常規思想---6//

逐個判斷每個整數是不是醜數的解法,直觀但不夠高效7//

所謂乙個數m是另乙個數n的因子,是指n被m整除,也就是n%m==0。根據醜數的定義,醜數只能被2、3、5整除。

也就是說如果乙個數能被2整數,我們把他連續除以2;如果能被3整出,就將其連續除以3.

如果能5整出,就將其連續除以5.如果得到的結果是1,則這個數就是醜數。

8class

solution917

int result = 0;18

int i = 1;19

while( i2026}27

return

result;28}

29public:30

bool isuglynumber(int

number)

3136

while(number % 3 == 0)37

40while( number % 5 == 0)41

44return (number == 1)? true:false;45

}46};47

//-------建立陣列儲存已經找到的醜數,用空間換時間

48//

根據醜數的定義,醜數應該是另乙個醜數乘以2、3、5的結果(1除外)。

49//

因此建立乙個陣列,裡面的數字是排好序的醜數,每乙個醜數都是前面的醜數乘以2、3、5得到的。

50//

假設陣列中已經有若干個排好序的後存放在陣列中,並且把已有最大的醜數記作m,分析如何生成下乙個醜數。

51//

該醜數一定是前乙個醜數乘以2、3、或者5的結果。

52//

由於是按照順序生成的,小於或者等於m肯定已經在陣列中,我們不需要再次考慮,還會得到若干個大於m的結果,

但我們只需要第乙個大於m的結果,因為我們希望醜數是按照從小到大的順序生成的。

53//

把得到乙個乘以2大於m的結果記為m2,把已有每乙個醜數分別乘以3、5,能得到第乙個大於m的結果m3和m5。那麼下乙個醜數應該是m2、m3、m5中的最小者。

54class

solution

5564 vector tmpvec(index);//

分配容器大小,並初始化為0

65 tmpvec[0] = 1;66

int i = 1;67

int t2 = 0, t3 = 0, t5 = 0;68

while(i 6975

if (tmpvec[i] == tmpvec[t3]*3)76

79if (tmpvec[i] == tmpvec[t5]*5)80

83 ++i;84}

85return tmpvec[index-1

];86

}87 };

醜數 只包含因子2 3和5的數

1 醜數 只包含因子2 3和5的數 根據已知求到結果,再把這個結果當成已知,求下乙個結果 2 醜數 3 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。4 5 常規思想 6 ...

牛客(33)醜數

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

《劍指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...