您的位置:首页 > 其它

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

2017-09-28 22:06 253 查看
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上面很喜欢考一些进位、按位与、亦或等等的题目,最近刷题真是长见识了。

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: