iT邦幫忙

0

leetcode with python:202. Happy Number

  • 分享至 

  • xImage
  •  

題目:

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.

給定一個數字,決定它是不是happy number
happy number是指對一個數重複做各位數平方相加處理,最終結果會是1的數
ex:1^2+9^2=82
8^2+2^2=68
6^2+8^2=100
1^2+0^2+0^2=1
所以19是happy number

我覺得一個數不是happy number的原因
在於它在做各位數平方相加處理時會出現循環
因此我寫了一個hash set來記錄出現過的值

class Solution:
    def isHappy(self, n: int) -> bool:
        s=set()
        while True:
            if n==1:
                return True
            i=0
            while n:
                i=i+(n%10)**2
                n=n//10
            if i in s:
                return False
            s.add(i)
            n=i

對該數不斷做各位數平方相加,同時紀錄出現過的值
一旦出現1就回傳True
一旦出現set裡的數就回傳False
後面證明我的想法是對的(本來還抱持著一定會超時的想法去丟)
最後執行時間35ms(faster than 93.04%)

討論區有人證出非happy number計算過程中一定會出現4

class Solution:
    def isHappy(self, n: int) -> bool:
        while True:
            if n==1:
                return True
            i=0
            while n:
                i=i+(n%10)**2
                n=n//10
            if i==4:
                return False
            n=i

我是沒特別去證明這件事啦
不過這樣就不用用到hash set了
速度跟記憶體使用都會好一些
最後執行時間32ms(faster than 96.67%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言