day-6
今天做这道!!
202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路:
为了找到规律先用程序打了个表,然后你就会发现在众多的重复过程之中,他们的数字到最后都会拥有重复的对象,也就是说,判断重复过程中的元素是否重复,则成为解题的关键。
过程:
重复过程很简单,这里不再赘述,需要注意的是(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; }
看在牛客的面子上做一道题吧! 文章被收录于专栏
一题小算法