开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情 难度:简单
需求描述
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
提示:
0 <= num <= 10^6
示例
- 输入:num = 14
- 输出:6
- 解释:
- 步骤 1) 14 是偶数,除以 2 得到 7 。
- 步骤 2) 7 是奇数,减 1 得到 6 。
- 步骤 3) 6 是偶数,除以 2 得到 3 。
- 步骤 4) 3 是奇数,减 1 得到 2 。
- 步骤 5) 2 是偶数,除以 2 得到 1 。
- 步骤 6) 1 是奇数,减 1 得到 0 。
题解
/**
* @param {number} num
* @return {number}
*/
var numberOfSteps = function(num) {
let setp = 0;
while(num > 0){
if(num % 2 === 0) {
num /= 2
} else {
num-=1
}
setp += 1;
}
return setp;
};
思路
- 如果是偶数,除以2。js中通过%2,来判断是否是偶数
- 如果是基数,减1,
- 定义一个变量记录步长
总结
在这里还有更优的解法,通过位运算来计算。但是我还没能掌握位运算,这是一个短板,后续会学习补充上。
参考
来源:力扣(LeetCode)