mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2026-08-30 19:44:57 +08:00
fix formula img show
This commit is contained in:
@@ -14,15 +14,20 @@
|
||||
|
||||
第1个条件等价于去掉最后的那个1后整个数变为0,即 `num & (num - 1) == 0`;(**注意学习这种去掉二进制最后一个1的方法**)
|
||||
第2个条件等价于 `(num | mask) == mask`, 其中`mask = 0b01010101010101010101010101010101`。
|
||||
## 思路二
|
||||
还是基于思路一的两个条件,我们知道如果只满足思路一的条件1的数可能是2^n也可能是4^n, 怎样排除掉2^n呢?
|
||||
我们知道:
|
||||
<img src="https://latex.codecogs.com/svg.latex?\Large&space;&&2^n=(3-1)^n=C_n^03^0(-1)^n+C_{n-1}^13^1(-1)^{n-1}+......+C_n^n3^n(-1)^0&&" />
|
||||
所以,
|
||||
* 1.n为偶数时既是2的幂也是4的幂,此时(-1)^n==1所以(2^n-1)% 3==0;
|
||||
* 2.n为奇数是只是2的幂但不是4的幂, 此时(-1)^n=-1所以(2^n-1)% 3==1;
|
||||
|
||||
故可以用(2^n-1)% 3是否等于0来等价判断思路一的条件2, 将2的幂和4的幂区分开。
|
||||
## 思路二
|
||||
还是基于思路一的两个条件,我们知道如果只满足思路一的条件1的数可能是`2^n`也可能是`4^n`, 怎样排除掉`2^n`呢?
|
||||
我们知道:
|
||||
<div align=center>
|
||||
<img width="500" src="img/342.png"/>
|
||||
</div>
|
||||
|
||||
所以,
|
||||
|
||||
* 1.n为偶数时既是2的幂也是4的幂,此时`(-1)^n==1`所以`(2^n - 1)% 3==0`;
|
||||
* 2.n为奇数是只是2的幂但不是4的幂, 此时`(-1)^n=-1`所以`(2^n - 1)% 3==1`;
|
||||
|
||||
故可以用`(2^n-1)% 3`是否等于0来等价判断思路一的条件2, 将2的幂和4的幂区分开。
|
||||
# C++
|
||||
## 思路一
|
||||
``` C++
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Reference in New Issue
Block a user