問題描述:設計乙個演算法,找出只含素因子2
,3
,5
的第 n 小的數。
問題說明:只包含因子2,3,5的正整數被稱作醜數,比如4,10,12都是醜數,而7,23,111則不是醜數,另外1也是醜數。
問題分析:這裡提供兩種解題思路:
方法一:暴力迴圈。對乙個數分別迴圈除2,3,5,若最後的結果為1即能除盡,計數器加1,最後輸出第n個數即可。
這種方法雖然可以解決問題,但如果n是乙個大整數,演算法的計算量就非常大,演算法時間就會很長,所以不推薦。
方法二:倒推。我們知道1是最小的醜數,那麼乙個醜數如果乘上2,3,5,得到的也會是醜數。我們可以從1開始,第一輪得到1乘2,3,5的最小值作為下乙個醜數,即2,第二輪我們比較3,5乘第乙個醜數和2乘上第二個醜數之間的最小值,作為第三個醜數。即,若醜數序列為 ugly,則第乙個值為1,
第二個醜數為:min(2*ugly[1] , 3*ugly[1] , 5*ugly[1]),即min(2,3,5)=2
第三個醜數為:min(2*ugly[2] , 3*ugly[1] , 5*ugly[1]),即min(4,3,5)=3
第四個醜數為:min(2*ugly[2] , 3*ugly[2] , 5*ugly[1]),即min(4,6,5)=4
以此類推,最後輸出第n個數即為所求。
**實現:(方法二)
const nthuglynumber = function (n)
var index = 1; //迴圈次數
var p2 = p3 = p5 = 0; //記錄2,3,5的索引值
while(index < n)
if(arr[arr.length-1] == 3*arr[p3])
if(arr[arr.length-1] == 5*arr[p5])
index++;
}return arr[arr.length-1];
}
JS的lintcode學習筆記(3) 統計數字
問題描述 計算數字 k 在 0 到 n 中的出現的次數,k 可能是 0 9 的乙個值。問題說明 統計k的次數,即若k 1,n 12,11中k的個數計算為2個 問題分析 由於n的位數不確定,所以一旦n為多位數,需要將每一位數字剝離再做判斷,這樣寫起來比較麻煩。首先我們需要乙個計數器,並給計數器賦0,然...
js學習筆記
js開發中需要注意的問題。1 for迴圈優化 將for var i 0 i elements.length i 改為for var i 0,j elements.length i j i 採用這樣的方式可以避免每次迴圈的時候計算 elsments 的長度。2 字串拼接優化 將var text the...
js學習筆記
一.document物件 物件集合 all 對文件所有html元素的訪問 anchors 返回所有anchor物件引用 forms 返回所有form物件引用 images 返回所有image物件引用 links 返回所有area和link物件引用 物件屬性 body 訪問body元素 cookie ...