LeetCode202--快乐数

题目描述:编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1


原本写这道题的时候是奔着应用刚学的哈希表的。刚开始看到这道题目的时候,一直在想要怎么才能退出循环呢,如果变不到1的话,去看了评论区的,然后有人有说道双指针的方法,有点不知所以然。因为觉得这是个哈希表标注下的题目,但是题解了很多并没有用C语言来实现哈希表的方法。于是又想回来了这个双指针法,究竟是什么意思呢?什么是双指针呢,自己学双指针是在什么情况下学的?是的,是在解决环形链表的时候呢,这个时候不也是刚好有个环形的循环吗?于是就用这个方法了。
代码

//计算每个数平方和函数--返回一次计算结果
int sum(int key)
{
    int mod;
    int sum = 0;
    while(key)
    {
        mod = key % 10;
        sum += mod * mod;
        key /= 10;
    }
    return sum;
}

bool isHappy(int n){
    int slow = n;		//慢指针
    int fast = n;		//快指针	
    do{
        slow = sum(slow);		//慢指针走1部
        fast = sum(fast);			/./快指针走两步
        fast = sum(fast);
        if(fast == 1)			//判断快指针的效率会更高一点
            return true;
    }while(slow != fast);
   return false;
}

思考:自己虽然把双指针怎么使用想出来了,但是代码这方面,自己第一次尝试些的代码的运行时间过长,思路是对了,但是代码太多于冗长,于是去查看了别人的双指针法,有用函数的,有没有用函数的,但是都很简洁!并且自己学了双指针还是没有学以致用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值