文档章节

4的次幂 Power of Four

叶枫啦啦
 叶枫啦啦
发布于 2017/08/21 20:21
字数 303
阅读 10
收藏 0

问题:

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.

class Solution { // 2ms
    public boolean isPowerOfFour(int num) {
        while(num > 0 && num % 4 == 0){
            num /= 4;
        }
        return num == 1;
    }
}

② 使用log函数

class Solution { // 3ms
    public boolean isPowerOfFour(int num) {
        return num > 0 && (int)(Math.log10(num) / Math.log10(4)) - (Math.log10(num) / Math.log10(4)) == 0;
    }
}

③ num & (num - 1)可以用来判断一个数是否为2的次方数,由于是32位的整数,4的次方数的二进制中1只可能出现在1,3,5,7.。。。。。31这些位置。因此我们乘以0x55555555即可,那么我们只需与上一个数(0x55555555) <==> 1010101010101010101010101010101,如果得到的数还是其本身,则可以肯定其为4的次方数,

class Solution { //2ms
    public boolean isPowerOfFour(int num) {
        return num > 0 && (num & (num - 1)) == 0 && (num & 0x55555555) == num;
    }
}

④ 在确定是2的次方数了之后,发现只要是4的次方数,减1之后可以被3整除

class Solution { // 3ms
    public boolean isPowerOfFour(int num) {
        return num > 0 && (num & (num - 1)) == 0 && ((num - 1) % 3) == 0;
    }
}

© 著作权归作者所有

叶枫啦啦
粉丝 14
博文 583
码字总数 400448
作品 0
海淀
私信 提问
Codeforces 977D 题解报告

一、题目 http://codeforces.com/contest/977/problem/D 二、分析 依题意,可以考虑一个数是3的多少次幂,可以有余数。 比如18是3的2次幂,余数为2; 9是3的2次幂,余数为0; 2是3的0次幂,余...

海天一树X
2018/05/08
0
0
Oracle常用函数系列之四:数值函数(2)

本文将演示以下6个 Oracle中的常用数值函数。 函数 功能 LOG(x,y) 返回x为底y的对数 MOD(x,y) 返回x除以y的余数 POWER(x,y) 返回x的y次幂 ROUND(x[,y]) 返回x在第y位四舍五入 SQRT(x) 返回x...

博为峰教研组
2016/12/06
4
0
LeetCode:Power of Three - 数字三的幂

1、题目名称 Power of Three(数字三的幂) 2、题目地址 https://leetcode.com/problems/power-of-three/ 3、题目内容 英文:Given an integer, write a function to determine if it is a ......

北风其凉
2016/01/11
1K
0
STL系列之七 快速计算x的n次幂 power()的实现

计算x的n次幂最简单直接的方法就是相乘n次,很容易写出程序: 这种计算的效率显然不高,我们可以用二分法来加速计算x^n=x^(n/2)* x^(n/2)即x^10=x^5*x^5,这种计算N次幂只要相乘O(logN)次。运...

长平狐
2012/12/10
89
0
STL系列之七 快速计算x的n次幂 power()的实现

计算x的n次幂最简单直接的方法就是相乘n次,很容易写出程序: 这种计算的效率显然不高,我们可以用二分法来加速计算x^n=x^(n/2)* x^(n/2)即x^10=x^5*x^5,这种计算N次幂只要相乘O(logN)次。运...

彭博
2012/04/12
157
0

没有更多内容

加载失败,请刷新页面

加载更多

uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
20分钟前
4
0
Tomcat是如何实现异步Servlet的

前言 通过我之前的Tomcat系列文章,相信看我博客的同学对Tomcat应该有一个比较清晰的了解了,在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设...

木木匠
44分钟前
18
0
mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系...

IT干货栈
今天
10
0
OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
749
11
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部