leetcode(快乐数字)两种解法

 解法一:

 //这里需要做两个函数,一个int next_n(int n)

int next_n(int n)//用来完成数字各个位的值的平方相加的功能

{   int r=0;

    while(n)

    {

        r+=(n%10)*(n%10);

        n=n/10;

    }

    return r;

}

//还有一个用来查找每次得出的结果的值是否在之前出现过

bool tain(int *history,int size,int n)

{

    int i=0;

    for(i=0;i<size;i++)

    {

        if(n==history[i])

        {

            return true;

        }

    }

    return false;

}

bool isHappy(int n){

    //int history[10000];//用来存储每次得出的值

    //int size=0;

    //while(!tain(history,size,n))//如果每次n的值在history函数中出现过,就返回,true,否则false,这里是取反,没有相同值的时候就继续运算next_n();

    //{

      //  history[size]=n;

       // size++;

       // n=next_n(n);

    //}

    //return n==1;//这里因为tain返回值为真,while就跳出,再判断是否相同值为一,如果为一,就说明是快乐数字

}

方法二:

运用龟兔赛跑的算法

 因为slow为乌龟,乌龟跑一次,兔子跑两次,最终他们总会有相同的值的时候,如果他们相同时,再判断其中的一个是否为一,如果成立,函数返回true,否则false

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值