题目
思路分析
模拟二进制的移位和加法操作,这里要注意最高位还存在进位的情况,也就是字符串全为1的情况。
代码
class Solution {
public:
int numSteps(string s) {
int ans = 0, n = s.size();
string end = "";
for(int i = 0;i < n ;i++) end += '0';
end[n - 1] = '1';
while(end != s){
if(s[n - 1] == '0'){
s = '0' + s.substr(0, n - 1);
}else{
int c = 1;
for(int i = n - 1; i >= 0; i--){
int t = s[i];
s[i] = (t - '0' + c) % 2 + '0';
c = (t - '0' + c) / 2;
if(c == 0) break;
}
if(c == 1){//这里要处理存在进位的情况,也就是全1;因为进位了,所以字符串的长度变化了。
s = '1' + s;
end = '0' + end;
n = s.size();
}
}
ans++;
}
return ans;
}
};