スポンサーリンク

【LeetCode】202. Happy Number 解答・解説【Python】

スポンサーリンク
スポンサーリンク
この記事は約3分で読めます。

 

問題

原文

Write an algorithm to determine if a number n is happy.

A happy number is a number defined by the following process:

  • Starting with any positive integer, replace the number by the sum of the squares of its digits.
  • Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.
  • Those numbers for which this process ends in 1 are happy.

Return true if n is a happy number, and false if not.

 

Example 1:

Example 2:

 

Constraints:

  • 1 <= n <= 231 - 1

 

内容

数字nがhappyであるかを判定するアルゴリズムを書いてください。

happy numberは以下のプロセスによって定義されます。

・正の整数を各桁の2乗の合計値に置き換える

・数字が1になるか、1以外の数字で無限ループに入るまで繰り返す

・最終的に1になったらhappy number

happy numberならTrue、そうでなければFalseを返してください。

 

※正しくない可能性があります。

 

解答

解答1:Python

・1つ目のwhile文では、nが1以外であり、まだ出現していない数なら処理を繰り返している。

・temp_nはnの各桁の二乗の合計を保持する変数。

・2つ目のwhile文が終了するまでは保持しておき、1つ目のwhile文で次のループに移った時に0で初期化する。こうしないと、前回のnの合計数値をもちこしてしまう。

・出現した数字をvisitedに加えて記録しておき、1つ目のwhile文の次回のループを始める前に判定を行う。

・2つ目のwhile文の内部では、各桁の二乗の合計値を求めている。

・nの数字の1桁目を、%を使って求め、これを二乗して変数に加える。

・nは//を使って1桁目を除外している

 

 

解答2:Python, 英語コメント

 

解き方は解答1と同じ。

英語での練習の表現用

 

 

 

メモ・参考・感想

■メモ

今更ながら、かつ初歩的だけど「n//=10」の操作で2進数のビットシフトのイメージをつかんだかもしれない。

・2進数のビットシフトを行うと、桁が1つ下がり、10進数では半分の数字になる。

・10進数を10で割ると、桁が1つ下がり、10進数で10分の1の数字になる。

 

 

前:637. Average of Levels in Binary Tree

次:1523. Count Odd Numbers in an Interval Range

 

解答前に知っておくと役に立つかもしれない情報

 

LeeetCodeの問題をアルゴリズムとデータ構造による分類

 

LeetCode 解答・解説記事一覧

コメント