[leetcode] Python 실현 - 202. 즐거움 수
4206 단어 leetcode
묘사 하 다.
하나의 알고리즘 을 만들어 서 하나의 숫자 가 '쾌락 수' 인지 아 닌 지 를 판단 하 다.하나의 '즐거움 수' 는 하나의 정수 에 대해 매번 이 수 를 모든 위치 에 있 는 숫자의 제곱 으로 바 꾼 다음 에 이 과정 을 반복 하면 이 수가 1 로 변 할 때 까지 무한 순환 일 수도 있 지만 1 로 변 하지 않 을 수도 있다.1 로 변 할 수 있다 면, 이 수 는 즐거움 수 다.
예시
입력: 19 출력: true 해석: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
내 문제 에서 말 했 듯 이 결 과 는 두 가지 상황 이 있다. 1. 결 과 는 1 이면 true 이다.2. 결 과 는 무한 순환 입 니 다. 계 산 된 값 을 저장 해 야 합 니 다. 당연히 산 목록 으로 이 루어 진 사전 입 니 다.여기 서 재 귀 를 사용 하면 사전 을 지 키 기 어렵 기 때문에 마지막 으로 전달 으로 바 뀌 었 다.
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
d = {}
while True:
l = list(map(int,list(str(n))))
m = 0
for i in l:
m += i**2
if m in d:
print(d)
return False
if m == 1:
print(d)
return True
d[m] = m
n = m
이전 버 전에 서 는 각 위치의 수 를 취 할 때 python 특유 의 방법 을 사 용 했 습 니 다.하지만 수학 적 방법 을 사용 하면 효율 적 이다.최적화 하 다.
d = {}
while True:
m = 0
while n > 0:
m += (n%10)**2
n //= 10
if m in d:
return False
if m == 1:
return True
d[m] = m
n = m
하지만 효과 가 뚜렷 하지 않 아 더 최적화 할 수 있다.다른 사람의 것 을 보다.
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
record = []
sq_sum = 0
se_n = n
while se_n != 1:
sq_sum = 0
while se_n > 0:
sq_sum += (se_n % 10) * (se_n % 10)
se_n = se_n / 10
if sq_sum in record:
return False
record.append(sq_sum)
se_n = sq_sum
return True
emmm... 대충 생각 은 같 지만 논리 적 판단 순서 가 다 르 기 때문에 시간 적 으로 차이 가 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.