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...