🤖
NeetCode 150 [Math & Geometry]:easy
NeetCodeのSolutionを書いていく
Happy Number
「非循環数」とは次のアルゴリズムで定義される整数です。
- 整数が与えられ、それぞれの数字の2条を積算する。
- 上記を繰り返し、1が得られたら終了する。あるいは1を含まないループを繰り返す。
- 1で止まったらそれは非循環数です。
非循環数であればTrueを、循環数であればFalseを返します。
計算結果を記録しておけばいいだけか?結構簡単?
class Solution:
calced: list[int] = []
def calc(self, n) -> bool:
strn = str(n)
retval = 0
for c in strn:
retval += int(c) * int(c)
if retval == 1:
return True
elif retval in self.calced:
return False
self.calced.append(retval)
return self.calc(retval)
def isHappy(self, n: int) -> bool:
return self.calc(n)
行けない!?
なんだか、Runだとpassするんだけど、Submitすると通らない謎の現象が発生。
Runの場合
Submitの場合
わからん・・・
まあいいや。答えを見たところ、listよりsetのほうがin演算が早いことを学べた ✏️
Plus One
整数の配列digitsが与えられます。
それぞれ0番目が最も大きな桁、1番目が次、のように続きます。0が最初に来ることはありません。
1を足した結果を同様の整数配列で返してください。
Input: digits = [1,2,3,4]
Output: [1,2,3,5]
Input: digits = [9,9,9]
Output: [1,0,0,0]
これは、文字列を数字にキャストして、演算して、文字列に直せないかな?
class Solution:
def plusOne(self, digits: list[int]) -> list[int]:
snumber = ""
len_digits = len(digits)
for i in digits:
digit = str(i)
snumber += digit
number = int(snumber) + 1
snumber = str(number)
digits = []
for c in snumber:
digits.append(int(c))
return digits
いけたー。
でもなんの工夫もしていないな。
計算量はO(2n)?
回答だと一番下の桁が9かどうか判定して、9ではない場合は足すだけ。
9の場合は最後の桁を0に、最後の桁以外を使って再帰的に計算。
確かにこれだとO(n)でいけていいね。
Discussion