[leetcode] Python 실현 - 202. 즐거움 수

4206 단어 leetcode
202. 즐거움 수
묘사 하 다.
하나의 알고리즘 을 만들어 서 하나의 숫자 가 '쾌락 수' 인지 아 닌 지 를 판단 하 다.하나의 '즐거움 수' 는 하나의 정수 에 대해 매번 이 수 를 모든 위치 에 있 는 숫자의 제곱 으로 바 꾼 다음 에 이 과정 을 반복 하면 이 수가 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... 대충 생각 은 같 지만 논리 적 판단 순서 가 다 르 기 때문에 시간 적 으로 차이 가 있 습 니 다.

좋은 웹페이지 즐겨찾기