2021.1.6 LeetCode 从零单刷个人笔记整理(持续更新)
github:https://github.com/ChopinXBP/LeetCode-Babel
不能用循环或者递归,意味着就得依靠奇技淫巧了。
位运算方法1
1.该数是2的幂(仅有一位为1),用n&(n-1)可以验证(去掉最右边的1)
2.这个1出现在奇数位上,用0x[5] = 0b[0101]可以验证
位运算方法2
1.该数是2的幂(仅有一位为1),用n&(n-1)可以验证(去掉最右边的1)
2.保证上一条的前提下,可以将4的幂写成(3+1)^n的展开(一个数的N次方-1总能除尽比这个数小1的数)
换底公式:可以用来求x的幂次
x^n = lg10(n) / lg10(x)
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
package Problems;
/**
*
* Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
* 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
*
*/
public class PowerOfFour {
//1.该数是2的幂(仅有一位为1),用n&(n-1)可以验证(去掉最右边的1)
//2.这个1出现在奇数位上,用0x[5] = 0b[0101]可以验证
public boolean isPowerOfFour(int num) {
return num > 0 && (num & (num - 1)) == 0 && (num & 0x55555555) > 0;
}
//1.该数是2的幂(仅有一位为1),用n&(n-1)可以验证(去掉最右边的1)
//2.保证上一条的前提下,可以将4的幂写成(3+1)^n的展开(一个数的N次方-1总能除尽比这个数小1的数)
public boolean isPowerOfFour2(int num) {
return num > 0 && (num & (num - 1)) == 0 && num % 3 == 1;
}
//换底公式求n的幂次:4^n=lg10(n)/lg10(4)
public boolean isPowerOfFour3(int num) {
double newnum = Math.log10(num) / Math.log10(4);
return newnum == (int)newnum;
}
}
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#