雄安建设工程信息网站,苏州公司建设网站制作,德州网络公司网站,文化礼堂建设情况网站快乐数 .习题链接题目题目解析初始值算法原理我的答案 . 习题链接
快乐数
题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为#xff1a;
对于一个正整数#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1… 快乐数 .习题链接题目题目解析初始值算法原理我的答案 . 习题链接
快乐数
题目
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为
对于一个正整数每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true 不是则返回 false 。
题目解析
分析题目,可以得到两种结果:
一直在1这个数上死循环,如:1-1-1…在历史的数据中进行死循环,但始终不为1
由上面两种结果可以推断出:结果必定会出现死循环,我们只需要找到死循环后进入循环圈中的一个数,判断这个数是否为1,就可以判断出该正整数是否为快乐数. 那么问题很明确,我们现在需要做的是,找到那个进入循环圈的数,这里我们使用双指针中的快慢指针来完成
初始值
fast: bitSum(n) slow: n 因为后面进行while循环的时候,判断条件是fast!slow,因此需要让fast与slow的初始值错开一位
算法原理
fast这个指针每次进行两次求平方和,而slow则是进行一次求平方和,循环执行该步骤,直到fast与slow相等,则说明已经找到了一个在循环圈里的数
我的答案
class Solution {public boolean isHappy(int n) {int fast bitSum(n);int slow n;while(fast!slow){fastbitSum(bitSum(fast));slowbitSum(slow);}return fast1;}public int bitSum(int n){int sum 0;while(n!0){int tmp n%10;sum sum tmp*tmp;nn/10;}return sum;}
}