天天看點

488 快樂數

原題網址:https://www.lintcode.com/problem/happy-number/description

描述

寫一個算法來判斷一個數是不是"快樂數"。

一個數是不是快樂是這麼定義的:對于一個正整數,每一次将該數替換為他每個位置上的數字的平方和,然後重複這個過程直到這個數變為1,或是無限循環但始終變不到1。如果可以變為1,那麼這個數就是快樂數。

您在真實的面試中是否遇到過這個題?  是

樣例

19 就是一個快樂數。

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1           

标簽 哈希表 數學     思路1:有個規律,非快樂數在循環計算各個位平方和時會出現4。  轉自此部落格 是以我們可以循環計算各個數位的平方和,直到出現1或者4。循環退出後判斷下是1還是4就可以了。   AC代碼:

class Solution {
public:
    /**
     * @param n: An integer
     * @return: true if this is a happy number or false
     */
    bool isHappy(int n) {
        // write your code here
    if (n<=0)
    {
        return false;
    }

    while(n!=1&&n!=4)
    {
        int sum=0;
        while(n)
        {
            sum=sum+(n%10)*(n%10);
            n=n/10;
        }
        n=sum;
    }
    return n==1;
    
    }
};      

思路2:和思路1類似,隻不過4換成了89。 首先說明一個真命題:任意一個正整數數運用題目中的算法都會循環到1或者89,若循環到1那就是快樂數,若循環到89,就是非快樂數,且循環到這兩個數的時候都會陷入死循環。是以這個題隻需要判斷題目中的算法最後将給的數循環到了1還是89即可。   轉自此文     思路3:參考 此部落格 第一種解法,用哈希表儲存每次循環的平方和,如果不是快樂數,會出現非1的重複數,判斷數組裡是否已經存在這樣的數即可。  

轉載于:https://www.cnblogs.com/Tang-tangt/p/9233837.html

繼續閱讀