「每日LeetCode」2022年1月31日

本文最后更新于:2023年3月19日 晚上

  1. 将数字变成 0 的操作次数

1342. 将数字变成 0 的操作次数

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

示例 1:
输入: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 。
**示例 2:

输入:num = 8 输出:4 解释: 步骤 1) 8 是偶数,除以 2 得到 4 。 步骤 2) 4 是偶数,除以 2 得到 2 。 步骤 3) 2 是偶数,除以 2 得到 1 。 步骤 4) 1 是奇数,减 1 得到 0 。
示例 3:
输入:num = 123 输出:12

提示:

  • 0 <= num <= 10^6

思路

和 1 做运算,如果为 0,说明为偶数,num 右移一位,相当于除以 2。否则与 1 做异或运算,相当于减去 1。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @param {number} num
* @return {number}
*/
var numberOfSteps = function (num) {
let count = 0;
while (num) {
if ((num & 1) === 0) num >>= 1;
else num ^= 1;
count++;
}
return count;
};