面試題34 醜數

2021-06-16 20:02:00 字數 1142 閱讀 8786

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

思路:1,傳統方法,乙個數乙個數判斷

2,第一種方法效率太低,主要是不是醜數也需要花費時間進行判斷。我們可以把醜數看做乙個陣列,另p2,p3,p5為指向陣列某個醜數的指標。因為下乙個醜數一定是由前面的醜數乘以2,3或5得到的。所以我們只需要判斷出醜數陣列的大小順序問題。順序問題可以由p2,p3,p5解決,判斷,p2*2,p3*3,p5*5的最小值作為下乙個醜數保留下來。

演算法一:

源**:

#include "stdio.h"

bool isugly(int number)

int getuglynumber(int index)

} return number;

}void main()

結果:

result:24press any key to continue

演算法二:

源**:

#include "stdio.h"

int min(int number1,int number2,int number3)

{ int min=(number1

1,1,1

min:2

2,1,1

min:3

2,2,1

min:4

3,2,1

min:5

3,2,2

min:6

4,3,2

min:8

5,3,2

min:9

5,4,2

min:10

6,4,3

min:12

8,5,3

min:15

8,6,4

min:16

9,6,4

min:18

10,8,4

min:20

12,8,5

min:24

reslut:24press any key to continue

劍指Offer 面試題34 醜數

我們把只包含因子2 3和5的數成為醜數,求按從小到大的順序的第1500個醜數。例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。分析 逐個判斷整數是不是醜數,直觀但是效率低下。根據醜數的定義,醜數只能被2 3和5整除,也就是說乙個數能被2整除,我們把它連續除以2 如果能...

劍指offer面試題 34 醜數

題目描述 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路分析 思路一 逐個判斷每個整數是不是醜數的解法,直觀但不高效 牛客網測試超時 所謂乙個數m是另乙個數n的因子,是...

劍指offer 面試題34 醜數

劍指offer 面試題34 醜數 題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 給乙個陣列存放當前已有的醜數,這些醜數都是按順序存放的,每次計算新的醜數時,...