『剣指offer』—JavaScript(33)ブス

923 ワード

醜数
タイトルの説明
素因数2,3,5のみを含む数をブス数(Ugly Number)と呼ぶ.例えば、6、8はすべて丑数であるが、14は因子7を含むためではない.習慣的に私たちは1を最初の醜数と見なしています.小さいから大きい順のN番目の丑数を求めます.
構想
  • 丑数を配列に順番に保存し、次の丑数を求める.
  • 次の丑数は、配列内のある丑数A*2,B*3,C*5の最小値によって得られる.
  • テーマの規定によると、最初の丑数は1で、配列に格納される.
  • の2番目の丑数は1*2、1*3、1*5の3つの中の最小値です.
  • の3番目の丑数は2*2,1*3,1*5の3つの中の最小値であり,順次類推し,N番目の配列を求めた.

  • インプリメンテーションコード
    function GetUglyNumber_Solution(index) {
        if (index === 0) return 0;
        var uglyNum = [1];
        var factor2 = 0,
            factor3 = 0,
            factor5 = 0;
        for (var i = 1; i < index; i++) {
            uglyNum[i] = Math.min(uglyNum[factor2] * 2, uglyNum[factor3] * 3, uglyNum[factor5] * 5);
            if (uglyNum[i] === uglyNum[factor2] * 2) factor2++;
            if (uglyNum[i] === uglyNum[factor3] * 3) factor3++;
            if (uglyNum[i] === uglyNum[factor5] * 5) factor5++;
        }
        return uglyNum[index - 1];
    }