codewars--js--Hamming Numbers
問題描述:
A?Hamming number?is a positive integer of the form 2i3j5k, for some non-negative integers?i,?j, and?k.
Write a function that computes the?nth smallest Hamming number.
Specifically:
- The first smallest Hamming number is 1 = 203050
- The second smallest Hamming number is 2 = 213050
- The third smallest Hamming number is 3 = 203150
- The fourth smallest Hamming number is 4 = 223050
- The fifth smallest Hamming number is 5 = 203051
The 20 smallest Hamming numbers are given in example test fixture.
Your code should be able to compute all of the smallest 5,000 (Clojure: 2000) Hamming numbers without timing out.
我的思路:
本題自己是沒有任何思路的,只是知道漢明數肯定是2或3或5的倍數,但是無從下手。后來看別人的答案,主要思路也是如此。
下一個漢明數為已存在漢明數的2x,3x,5x的倍數。
若i2是我們沒有用過的漢明數的指數的話,就乘以2;
若i3是我們沒有用過的漢明數的指數的話,就乘以3;
若i5是我們沒有用過的漢明數的指數的話,就乘以5。
我的答案:無,o(╥﹏╥)o
優秀答案:
(1)
function hamming (n) {var seq = [1];var i2 = 0, i3 = 0, i5 = 0;for (var i = 1; i < n; i++) {var x = Math.min(2 * seq[i2], 3 * seq[i3], 5 * seq[i5]);seq.push(x);if (2 * seq[i2] <= x) i2++; //<= 可換成 ==if (3 * seq[i3] <= x) i3++;if (5 * seq[i5] <= x) i5++;}return seq[n-1]; }?
哈哈哈!
轉載于:https://www.cnblogs.com/hiluna/p/8916419.html
總結
以上是生活随笔為你收集整理的codewars--js--Hamming Numbers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查银行卡余额方法
- 下一篇: “尼米兹”级核动力航母