總結的部分題目思路與**,待完善。
【劍指offer-第二版】部分題目與解答【c++版本】
我們把只包含因子2,3,5的數稱作醜數。求按從小到大的順序的第1500個醜數。例如,6,8都是醜數,但14不是醜數,因為它包含因子7。習慣上我們把1當作第乙個醜數。
1.首先要理解醜數的概念。換個角度理解,因為醜數只能被2,3,5整除。也就是說,如果乙個數能被2整除,就繼續除以2,能被3整除,就繼續除以3,能被5整除,就繼續除以5。這樣到最後得到的結果是1,那麼這個數就是乙個醜數。
2.根據醜數的定義,乙個醜數應該是另乙個醜數乘上2,3,5的結果(1除外)。
3.採用空間換時間的方法。建立乙個陣列來按從小到大的順利記錄已經找到的醜數。生成陣列的下乙個醜數,那麼該醜數必定是陣列中的某乙個醜數乘2,3或者5生成的。記錄乙個t2,t2是陣列中已有的乙個數,排在它前面的每乙個醜數乘以2得到的結果都會小於等於已知的最大的醜數,t2是第乙個乘2大於陣列中最大的醜數的那個數。同樣記錄乙個t3和t5。
4.那麼要新增到陣列中的下乙個醜數就是t2×2,t3×3,t5×5中最小的那乙個。
5.按照這個思路向陣列中新增醜數,直到找到需要的那個醜數為止。
//與原書略不同的實現方法
//原書使用指標來爬,效率應該是更好的
#include
#include
#include
#include
#include
using
namespace
std;
int getuglynum(int index)
; //初始化t2,t3,t5為1
int t2 = 1,t3 = 1,t5 = 1;
//while(uglynum.size() != index)
return uglynum[index-1];
}int main()
return
0;}
劍指offer 面試題49 醜數
我們把只包含因子2 3 和 5 的數稱作醜數 ugly number 求按照從小到大的順序的第1500個醜數。例如,6 8都是醜數,但是14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。有空再補上 public class 49 uglynumber return uglynumbers i...
《劍指offer》面試題49 醜數
設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12 思路 思路1 從1開始遞增,依次判斷每個數是否是醜數,不夠高效 思路2 思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數 因...
劍指offer 面試題49 醜數
面試題 劍指offer 題目解答 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...