LintCode-简单-快乐数

来源:互联网 发布:lee levis 知乎 编辑:程序博客网 时间:2024/05/16 07:28

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

问题
问题在于判断一个数不是快乐数,一开始是想用try-catch,但捕捉到异常时返回false认为该数不是快乐数,但是发现在递归中调用的try-catch并没有直接return false,而是直接报错了(JAVA忘差不多了,待查)。打印飞快乐数的每一次新值得时候发现这些值是周期出现的。比如20->4->16->37->58->89->145->42->20,因此将每次的新值保存在List中,在变为1之前重复出现了某一个值就是非快乐数。

static ArrayList<Integer> list = new ArrayList<Integer>();public static boolean isHappy(int n) {    // Write your code here    if(n < 1) return false;    if(list.contains(n))        return false;    else        list.add(n);    int newNumber = 0;    int temp = 0;    while (n != 0) {        temp = n % 10;        newNumber += temp * temp;        n = n / 10;    }//System.out.println(newNumber);    if(newNumber==1){        return true;    }else{        return isHappy(newNumber);    }
0 0
原创粉丝点击