Power-of-four-----LeetCode上发现的一道很搞笑并且有意思的简单题!!

leetcode原题链接:https://leetcode.com/problems/power-of-four/description/

今天刷LeetCode发现一道“有魔性”的题,简直不写一个博客记录都对不起我自己!虽然网上有很多解法了,我还是想把我的发出来,绝对是绝无仅有的,哈哈哈哈,搞笑我是认真的!不过题解都是AC了的。不用担心啦~~~

原题是酱紫的:

Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?


题解:其实就是要你写一个方法,判断一个数是不是4的N次方。首先想到应该是可以用按位与(&),然后就想,既然给出我是在32位以内,是不是可以暴力?

本着“探索精神,我试了一试,结果固然不出乎我意料!!这里贴上我先是试试的代码,AC了!!

第一遍AC:

class Solution {
public:
    bool isPowerOfFour(int num) {
          switch(num){
      case 1:
      case 4:
      case 4*4:
      case 4*4*4:
      case 4*4*4*4:
      case 4*4*4*4*4:
      case 4*4*4*4*4*4:
      case 4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4*4*4*4*4:
      case 4*4*4*4*4*4*4*4*4*4*4*4*4*4*4:
              return true;
  } 
    return false ;
    }
};


第二遍AC:

class Solution {
public:
    bool isPowerOfFour(int num) {
     switch(num){
      case 1:
      case 4:
      case 16:
      case 64:
      case 256:
      case 1024:
      case 4096:
      case 16384:
      case 65536:
      case 262144:
      case 1048576:
      case 4194304:
      case 16777216:
      case 67108864:
      case 268435456:
      case 1073741824:
              return true;
  } 
    return false ;
    }
};


哈哈哈,简直了!要是考这个,我怕是用了一个最简单又最搞笑的方式,估计用下面这个思路的人会鄙视死我!

好了,言归正传,这是最正常的方式,其实思路也简单,一个数 num 如果是 4 的 N 次方必然也是 2 的 N 次方。所以可以先判断 num 是否是 2 的 N 次方。然后再将 2 的 N 次方中那些不是 4 的 N 次方的数去掉。因此就有了下面的代码:

bool isPowerOfFour(int num){

if(num <= 0)returnfalse;

if(num & (num - 1))returnfalse;// 先判断是否是 2 的 N 次方

if(num & 0x55555555)returntrue;// 再将不是 4 的 N 次方的数字去掉

returnfalse;

}

其实就是考了一个小知识点,也还好啦,发现leetcode上面很喜欢考一些进位、按位与、亦或等等的题目,最近刷题真是长见识了。

感觉多多练习这些二进制知识才是王道啊!吐舌头


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值