HappyNumber

来源:互联网 发布:2017年国产动漫数据 编辑:程序博客网 时间:2024/09/21 11:22

题目:
所谓HappyNumber,是给定一个正整数开始,由整数的每一位的平方和得到一个新的整数,再求得新整数的平方和,依此进行下去,如果最后结果为1,则最初给定的数字就是HappyNumber,否则最终会进入一个循环(不包括1),该数就是不HappyNumber。
例如:19是一个HappyNumber
1^2 + 9^2 = 82 (1^2 在题目里表述 1 的平方,非编程语言中的异或运算符)
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

思路:
1. 第一点需想到,如果结果不等于1,最后肯定会进入一个循环
2. 判断序列,链表循环,很容易想到快慢法
3. 这里还有一个巧妙的思想,运用hashtable 或者 bool 数组,也可以判断循环

代码:

public class Solution {    //快慢法    public bool IsHappy(int n){        int slow,fast;        slow = fast = n;        do{            slow = DigitSum(slow);            fast = DigitSum(fast);            fast = DigitSum(fast);        }while(slow != fast);        if(slow == 1) return true;        return false;    }    //bool数组与hashtable的思想一样,循环意味着重复    public bool IsHappy(int n) {        bool[] esp = new bool[1000];        n = DigitSum(n);        while(!esp[n]){            esp[n] = true;            if(n == 1){                return true;            }            n = DigitSum(n);        }        return false;    }    public int DigitSum(int n){        int sum = 0;        while(n > 0){            int digit = n % 10;            sum += (digit * digit);            n = n / 10;        }        return sum;    }}
0 0