1611-使整数变为 0 的最少操作次数
给你一个整数 n
,你需要重复执行多次下述操作将其转换为 0
:
- 翻转
n
的二进制表示中最右侧位(第0
位)。 - 如果第
(i-1)
位为1
且从第(i-2)
位到第0
位都为0
,则翻转n
的二进制表示中的第i
位。
返回将 n
转换为 0
的最小操作次数。
示例 1:
**输入:** n = 3
**输出:** 2
**解释:** 3 的二进制表示为 "11"
" **1** 1" -> " **0** 1" ,执行的是第 2 种操作,因为第 0 位为 1 。
"0 **1** " -> "0 **0** " ,执行的是第 1 种操作。
示例 2:
**输入:** n = 6
**输出:** 4
**解释:** 6 的二进制表示为 "110".
" **1** 10" -> " **0** 10" ,执行的是第 2 种操作,因为第 1 位为 1 ,第 0 到 0 位为 0 。
"01 **0** " -> "01 **1** " ,执行的是第 1 种操作。
"0 **1** 1" -> "0 **0** 1" ,执行的是第 2 种操作,因为第 0 位为 1 。
"00 **1** " -> "00 **0** " ,执行的是第 1 种操作。
提示:
0 <= n <= 109
解题思路
自己看的笔记:见注释
代码
1 | class Solution { |
Comments