问题描述
解题方案
解题方案参考自评论区庄周の蝴蝶
以32位二进制为例, 例如15(0x0000000f):
- 遇奇减1, 即将末位1变为0, 和0xfffffffe(-2)取&即可;
- 遇偶除2, 即右移一位即可;
- 两种情况都需要次数加1.
实现代码
class Solution {
public:
int numberOfSteps (int num) {
int ans=0;
while(num){
num = (num & 1) == 1 ? num & -2 : num >> 1;
ans++;
}
return ans;
}
};