Leetcode 计算累积平方和

 

给定一个32位int型正整数,我们定义如下操作,取其十进制各位数字的平方和,并不断重复这个操作。如果某次操作完成后得到的结果是1,则返回true;否则继续执行,直到证明永远不会得到结果为1,返回false

input:19

output:true

原因:

1^2 + 9^2=82

8^2 + 2^2 = 68

6^2 + 8^2 =  100

1^2 + 0^2 + 0^2 = 1

 

 

思路:

如果不能出现1  那么最终会到达一个环,即与之前的数字相等

采取set记录之前的方式,复杂度过高,采取快慢指针的方式。

fast=fast->next->next    slow=slow->next

 

#include<iostream>
#include<vector>
#include<set>
using namespace std;
int next(int k)
{

        int next=0;
        while(k)
        {
            next+=(k%10)*(k%10);
            k/=10;
        }
        return next;


}


bool fun(int k)
{
    
  int slow=k;
  int fast=k;
  
   while(fast!=slow && fast!=1)
   {

        fast=next(fast);
        if(fast==1)
            return true;
        fast=nexxt(fast);
        slow=next(flow);

   }

    if(fast==1)
         return true;
    else
         return false;

     
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值