LeetCode刷题之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
class Solution:
def numberOfSteps (self, num: int) -> int:
Bin = list(bin(num)[2:])
return len(Bin) + Bin.count('1') - 1
- 算法说明:
将数字转化成二进制,求出一共有多少位,即需要进行多少次÷2操作,即右移操作,由于最高位的“1”不需要÷2操作,所以总数-1。求出有多少个“1”,就需要进行多少次-1操作。