LC 1342.Number of Steps to Reduce a Number to Zero

题目描述

这是 LeetCode 上的 1342. 将数字变成 0 的操作次数 ,难度为简单

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

示例 1:

1
2
3
4
5
6
7
8
9
输入: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:

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

示例 3:

1
2
输入:num = 123
输出:12

提示:

  • 0 <= num <= 10^6

解答

方法一:模拟

根据题目要求进行模拟,是偶数的时候除以 2 , 否则减去 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public int numberOfSteps(int num) {
int cnt = 0;
while (num != 0) {
if ((num & 1) != 0) {
--num;
} else {
num >>= 1;
}
++cnt;
}
return cnt;
}
}
  • 时间复杂度\(O(N)\),其中 Nnums 的长度。

  • 空间复杂度\(O(1)\)

每题一图


LC 1342.Number of Steps to Reduce a Number to Zero
https://chen-huaneng.github.io/2023/12/13/2023-12-13-2023-12-13-lc-1342/
作者
Abel
发布于
2023年12月13日
更新于
2023年12月13日
许可协议