题目:Power of Two

Given an integer, write a function to determine if it is a power of two.

题意:判断一个数是否是2的k次方数。

思路:

2的次方数使用2进制表示则必然只有最高位是1其他都是0;

这样判断一个数最多需要循环32次就能得出结果。

则程序如下:

bool isPowerOfTwo(int n){
if (!n)return false;
while ((n&0x01) != 0x01){//2的次方则只有最高位是1
n = n >> ;
}
return n == ;
}

但是这样还有循环,如何不使用循环一下子判断出来呢?

思路2:

2的次方使用二进制只有一个1,而是用下面的方法,可以判断一个二进制序列中只有一个1.

n&(n-1);//n-1会将n中从小到大第一个为1的位置变成0,这样就能判断只有一个1的情况。

bool isPowerOfTwo(int n){
//2的幂只有一个1,则使用n&(n-1)来统计1的个数
return n > && !(n & (n - ));
}

题目:Power of Three

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

题意:判断一个数是否是3的k次幂数。

要求:不能使用递归或循环。

思路:

如果可以使用循环,也很简单每次对3求余,就可以了。

bool isPowerOfThree(int n) {
while (n >= ){
if (n % )return false;
n /= ;
}
return n == ;
}

但是,要求不使用循环或递归。

仔细想想,3的k次幂的数就是,该数的因子只有3,那么使用一个在int范围内最大的3的k次幂的数对给定的数求余,如果为0就说明它是3的k次幂的数。

扩展开来,所有的判断n的k次幂的数都是可以使用这个方法。

bool isPowerOfThree(int n) {
//int中3的最大次幂数1162261467
return n > && !( % n);
}

题目:Power of Four

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的k次幂数。

要求:不能使用递归或循环。

思路:

4的次幂,乍一看好像和2的次幂差不多,能不能用类似的方法来求解呢?

仔细一想肯定发现不能单纯判断一个1来判断4的次幂,为什么呢?因为4的次幂写成2进制,1只会出现奇数的位置上,当然排除1的情况。

那么只需要在判断1是不是在奇数的位置上是不是就可以判断它是不是4的k次幂。

推敲一下发现可行,程序如下:

bool isPowerOfFour(int n){
return n > && !(n & (n - )) && ((n & 0x55555555) == n);//0x55555555保证在奇数的位置上的1被保留
}

思路2:

还有一个思路,4^k - 1 = ?

如果k是偶数,不妨设k = 2;因式分解得到(4 - 1)*(4 + 1);

如果k是奇数,不妨设k = 3;因式分解得到(4 - 1)*(4^2 + 4 + 1);

如果k > 2;不妨设k = 2t,则因式分解得到(4^t - 1)*(4^t + 1)

(4^t - 1)同上面的情况,可以发现总可以分出一个(4 - 1)的因子,所以,4^k - 1 必定会有3的因子。

数学不精,没办法精确证明。

bool isPowerOfFour(int n){
return n > && !(n & (n - )) && !((n - )%);
}

[LeetCode]Power of N的更多相关文章

  1. [LeetCode] Power of Four 判断4的次方数

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

  2. [LeetCode] Power of Three 判断3的次方数

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...

  3. [LeetCode] Power of Two 判断2的次方数

    Given an integer, write a function to determine if it is a power of two. Hint: Could you solve it in ...

  4. LeetCode Power of Four

    原题链接在这里:https://leetcode.com/problems/power-of-four/ 题目: Given an integer (signed 32 bits), write a ...

  5. LeetCode Power of Three

    原题链接在这里:https://leetcode.com/problems/power-of-three/ 与Power of Two类似.检查能否被3整除,然后整除,再重复检查结果. Time Co ...

  6. Leetcode Power of Two

    Given an integer, write a function to determine if it is a power of two. 题目意思: 给定一个整数,判断是否是2的幂 解题思路: ...

  7. Leetcode Power of two, three, four

    Given an integer, write a function to determine if it is a power of two. Hint: Could you solve it in ...

  8. leetcode power(x,n)

    class Solution { public: double pow(double x, int n) { double a=1; if(n==0)return 1; if(x==1)return ...

  9. LeetCode——Power of Two

    Description: Given an integer, write a function to determine if it is a power of two. public class S ...

随机推荐

  1. Hive 系列(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  2. C#简单爬取数据(.NET使用HTML解析器ESoup和正则两种方式匹配数据)

    一.获取数据 想弄一个数据库,由于需要一些人名,所以就去百度一下,然后发现了360图书馆中有很多人名 然后就像去复制一下,发现复制不了,需要登陆 此时f12查看源码是可以复制的,不过就算可以复制想要插 ...

  3. Codeforces 1009E

    题意略. 思路: 比如现在n = 11.那么我们观察a[1.....n]的出现次数: a[1]:2 ^ 10 + 10 * 2 ^ 9 a[2]:2 ^ 9 + 9 * 2 ^ 8 a[3]:2 ^ ...

  4. 百度地图Canvas实现十万CAD数据秒级加载

    背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScr ...

  5. Scratch 3下载,最新版Scratch下载,macOS、Windows版

    下载地址:https://scratch.mit.edu/download 废话不多说,先上下载地址! 之前小弟学习Scratch,用的2.0发现诸多BUG,到度娘想下最新版却没有发现一篇比较正经的文 ...

  6. Win10环境下安装压缩包版本MySQL-8.0.13

    准备工作 系统环境:Windows 10 1803版本: 压缩包:MySQL-8.0.13 Windows zip包下载: 安装过程 1. 加载安装包到你的安装目录 将下载的MySQL压缩包解压并移到 ...

  7. nginx安装错误:c compiler cc is not found

    今天安装软件nginx的时候遇到的报错:c compiler cc is not found 查了下网上的资料,解决方案也不复杂. 先说明下环境: 服务器:CentOS 7 nginx:2.3.1 原 ...

  8. 工作中遇到的99%SQL优化,这里都能给你解决方案

    前几篇文章介绍了mysql的底层数据结构和mysql优化的神器explain.后台有些朋友说小强只介绍概念,平时使用还是一脸懵,强烈要求小强来一篇实战sql优化,经过周末两天的整理和总结,sql优化实 ...

  9. mysql中的截取函数及其实例

    一.mysql截取字符串函数 1.left(str,length) 从左边截取length 2.right(str,length)从右边截取length 3.substring(str,index)当 ...

  10. 分享一个赚钱方法:用趣分类app在家轻松赚钱

    什么是趣分类 近期,垃圾分类是社会各界和广大市民关心的一个热门话题,随着垃圾分类工作的推进,各地都掀起学习垃圾分类的热潮.为了我们的美好生活,打响"垃圾分类"这场硬仗刻不容缓.据了 ...