九日打卡-2-阅读报告

练习题

1 题目描述 231. 2的幂 

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方

class Solution {
public:
    bool isPowerOfTwo(int n) 
    {
        if(n==0)
        {
            return 0;
        }
        else
        {
        int x;
        x = n % 2;
        if (x !=0)                 
        {
            if (n != 1)        //在取余不为零情况下,排除n为1的情况
                return 0;
            else
                return 1;
        }
        else                    //若取余结果为零,则递归,进一步整除
            return isPowerOfTwo(n/2);
        }
    }   
};

2 题目描述 326. 3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x

class Solution {
public:
    bool isPowerOfThree(int n) 
    {
        if(n==0)
        {
            return 0;
        }
        else
        {
            int x;
            x = n % 3;
            if (x !=0)                 
            {
                if (n != 1)        //在取余不为零情况下,排除n为1的情况
                    return 0;
                else
                    return 1;
            }
            else                    //若取余结果为零,则递归,进一步整除
                return isPowerOfThree(n/3);
        }
    }
};

3 题目描述 342. 4的幂

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x

class Solution {
public:
    bool isPowerOfFour(int n) 
    {
         if(n==0)
        {
            return 0;
        }
        else
        {
            int x;
            x = n % 4;
            if (x !=0)                 
            {
                if (n != 1)        //在取余不为零情况下,排除n为1的情况
                    return 0;
                else
                    return 1;
            }
            else                    //若取余结果为零,则递归,进一步整除
                return isPowerOfFour(n/4);
        }
    }
};

4 题目描述 剑指 Offer 64. 求1+2+…+n

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

class Solution 
{
    int res=0;
    public:
    int sumNums(int n) 
    {
        bool x = n > 1 && sumNums(n - 1) > 0;
        res += n;
        return res;
    }
};

今日心得

1 在某些时候,可以利用短路来代替if-else语句

2 递归的思想

3 判断是否是一个数的幂的时候,需要结合取余与整除,大致思路为先取余看输入数是否为基数的倍数,若是,则将输入数除以基数后进行递归操作。不断递归直至最后递归数小于基数,此时判断递归数是否为1 ,若为1则结果为true。注意递归函数中往往需要特判,且必须有终止条件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值