题目描述
num 如果是偶数除2,奇数-1. 问多少步能操作到0.
算法
二进制数数:
int numberOfSteps (int num) {
if (!num) return 0;
int res = 0;
while (num){
res += (num & 1) ? 2: 1;
num >>= 1;
}
return res - 1;
}
人类直观数学思维:
int numberOfSteps (int num) {
int cnt = 0;
while (num){
if (num & 1) num -= 1, cnt += 1;
else num /= 2, cnt += 1;
}
return cnt;
}
Python 代码
def numberOfSteps (self, num: int) -> int:
if not num: return 0
cnt = 0
while num:
if num & 1:
num >>= 1
cnt += 2
else:
num >>= 1
cnt += 1
return cnt - 1
或更好看的写法:
def numberOfSteps (self, num: int) -> int:
if not num: return 0
cnt = 0
while num:
cnt += (num & 1) + 1
num >>= 1
return cnt - 1
def numberOfSteps (self, num: int) -> int:
cnt = 0
while num:
if not num & 1:
num //= 2
cnt += 1
else:
num -= 1
cnt += 1
return cnt