今天做这道!!

202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

示例:

输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

  u1s1 题目很好懂 找不到规律就无从下手

思路:
  为了找到规律先用程序打了个表,然后你就会发现在众多的重复过程之中,他们的数字到最后都会拥有重复的对象,也就是说,判断重复过程中的元素是否重复,则成为解题的关键。

  

过程:

  重复过程很简单,这里不再赘述,需要注意的是(n%10) *( n%10)必须加上括号,否则运算出错,以及map中自带的检查重复key方法containkay。

 public boolean isHappy(int n) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        while(!map.containsKey(n)){

            if(n==1){
                return true;
            }else {
                map.put(n, n);
            }
            n = sqrt(n);

        }
        return false;
    }

    public Integer sqrt(int n){
        int count=0;
        while(n!=0){
//            System.out.println("count:"+count);
            count += (n%10) *( n%10);
            n=n/10;
        }
        return count;
    }