赞
踩
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)
编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
如果 n
是 快乐数 就返回 true
;不是,则返回 false
。
输入:n = 2 输出:false
1 <= n <= 2的31次方 - 1
- // 使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,
- // 当二者相等时,即为一个循环周期。
- // 此时,判断是不是因为 1 引起的循环,是的话就是快乐数,否则不是快乐数。
-
- class Solution {
- public:
- int bitSquareSum(int n) {
- int sum = 0;
- while(n > 0)
- {
- int bit = n % 10;
- sum += bit * bit;
- n = n / 10;
- }
- return sum;
- }
-
- bool isHappy(int n) {
- int slow = n, fast = n;
- do{
- slow = bitSquareSum(slow);
- fast = bitSquareSum(fast);
- fast = bitSquareSum(fast);
- }while(slow != fast);
-
- return slow == 1;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。