题目
思路
从后往前遍历字符串,除2相当于右移一位;
如果idx所指的是1,则需要不断向前进位,直到碰到0为止,并将这个0位修改为1,在这个过程中,ans++, idx--,
表示只需要右移一位即可消除此位;如果idx前面所有位都是1,那么只要ans++,idx--就可以了,直接可以得到结果,不需要改位;
如果idx所指元素是0,直接ans++,idx++,代表右移一位即可;
代码
class Solution {
public:
int numSteps(string s) {
int ans = 0, idx = s.size() - 1;
while(idx > 0){
if(s[idx] == '0'){
ans++;
idx--;
}
else{
ans++;//进位的+1
while(idx >= 0 && s[idx] == '1'){//进位后,连续的1产生连续的0
ans++;
idx--;
}
if(idx > 0)//只有在找到0的情况下才会变位
s[idx] = '1';
}
}
return ans;
}
};