博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Power of N
阅读量:7104 次
发布时间:2019-06-28

本文共 1973 字,大约阅读时间需要 6 分钟。

题目: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 >> 1; } return n == 1;}

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

思路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 > 0 && !(n & (n - 1));}

题目: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 >= 3){        if (n % 3)return false;        n /= 3;    }    return n == 1;}

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

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

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

bool isPowerOfThree(int n) {    //int中3的最大次幂数1162261467     return n > 0 && !(1162261467 % 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 > 0 && !(n & (n - 1)) && ((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 > 0 && !(n & (n - 1)) && !((n - 1)%3);}

 

转载于:https://www.cnblogs.com/yeqluofwupheng/p/7347778.html

你可能感兴趣的文章
存储过程中用到的年,月,周的函数
查看>>
《设计模式解析(第2版•修订版)》—第1章复习题
查看>>
《iOS 6核心开发手册(第4版)》——1.14节秘诀:实时触摸反馈
查看>>
《Netty 权威指南》—— 传统的BIO编程
查看>>
《测试驱动数据库开发》——1.3 什么是障碍
查看>>
《jQuery Cookbook中文版》——1.7 返回破坏性修改之前的选择
查看>>
阿里云CDN + nginx多级代理获取客户端IP
查看>>
不用无限手套,人人都能开发BI系统
查看>>
ES6 module加载机制
查看>>
JavaScript判断数据类型
查看>>
TechEd 2012极为紧张的5天行程简单分享如下!
查看>>
局域网里加入新机
查看>>
一家德资企业的网络管理心得
查看>>
IBM WebSphere Portal 6.0的主题与皮肤开发
查看>>
我的友情链接
查看>>
软件研发中缺失的一环:人
查看>>
《云计算》教材配套课件合集
查看>>
linux进程管理
查看>>
java中资源的加载方法
查看>>
python——twisted
查看>>