[leetcode]問題解答と解説。202. Happy Number [JavaScript]
皆さんleetCode好きですよね。私も好きです。
なかなかやる機会がないのですよね。
時間時間で。
私は私自身ある決意をして今臨んでいます。
モチベーションを保つためだけにやっています。
では今日のleetCode。
「202. Happy Number」の解決策と方法。自分がまず挑戦して
やったことをさらけ出します。
※下にある自分のコードは自分で設けた制限時間内に書けたところまです。
なので動く保証もなければ間違っている可能性もあるのでご了承くださいませ
これは
「私は年末までこれを続けたらどんなleetCoderになるか」のシリーズ。
実験的ブログ更新です。
202. Happy Number ルール
ざっくり和訳
n数が幸せかどうかを判断するためのアルゴリズムを記述します。
ハッピー数とは、次のプロセスで定義される数です。
任意の正の整数から始めて、数値をその桁の2乗の合計に置き換えます。
数が1に等しくなるまで(それがとどまる場所)、または1を含まないサイクルで無限にループするまで、このプロセスを繰り返します。
このプロセスが1で終わる数字は幸せです。
ハッピー数の場合はtrue返し、そうでない場合はfalseを返します。
例1:
入力: n = 19
出力: true
説明:
1 2 + 9 2 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
例2:
入力: n = 2
出力: false
制約:
1 <= n <= 231 - 1
202. Happy Number 問題ページ
202. Happy Number
my code is time over.
function isHappy(n) {
let num = n
let result = 0
while(num % 10 > 0){
console.log(num)
num = Math.floor(num / 10)
result += isHappy(num + Math.pow(n))
}
return result
};
isHappy(14342)
タイムオーバーで撃沈
202. Happy Number。discussの中の一つの解答例
数ある中からJavaScriptのもので、理解しやすい解説をピックアップしました。
discussから見ればさらにもっと違う方法で真似したくなるものがあるかもしれないですね
JavaScriptでfilterされている、discussはこちらから
let result = n;
let set = new Set();
while(result != 1) {
result = 0; // 積み上げてきた計算を初期化
while (n != 0) {
result += (n % 10) ** 2;
n = parseInt(n/10); // 小数点になったら0。whileを抜ける。全ての数字を分解して2乗し終わる
}
if (set.has(result)) return false; // 同じ数字があったら繰り返してしまうのでその時点でfalse。処理は止まる
set.add(result)
n = result;
}
return true;
実際にブレイクポイント張って値を追いました
202. Happy Numberをやってみて感想
これは思いつかなかっただろうな。whileを2回回す発想。
そもそも数字を一桁ずつ切り取っていく方法を再勉強した