215 words
1 minute
力扣每日一题 20260226

1404. 将二进制表示减到 1 的步骤数#

观察可知,一旦发生进位,高位的 11 都会变成 00,而 00 都会变成 11,且二进制的位数也会因进位加一,导致多出一步除以 22 的操作,所以设字符串中的 11 的位置为 pospos,字符串长度为 nn

如果 pos=0pos=0 说明没有发生进位,则答案就是 n1n-1,如果 pos>0pos>0 说明发生了进位,那么答案就是 n1n-1 加上 11pospos 之间 00 的个数,再加两步(pospos 这步的加一操作和高位除以 22 的操作)。

代码:

class Solution {
public:
int numSteps(string s) {
int pos = 0, ans = s.size() - 1;
for (int i = ans; i >= 0; i--) {
if (s[i] == '1') {
pos = i;
break;
}
}
if (pos > 0) {
ans += count(s.begin() + 1, s.begin() + pos, '0') + 2;
}
return ans;
}
};
力扣每日一题 20260226
https://fuwari.vercel.app/posts/leetcode_daily/0226/
Author
P19E99
Published at
2026-02-26
License
CC BY-NC-SA 4.0