题目链接
给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num 。
示例 1:
输入:num = “51230100”
输出:“512301”
解释:整数 “51230100” 有 2 个尾随零,移除并返回整数 “512301” 。
示例 2:
输入:num = “123”
输出:“123”
解释:整数 “123” 不含尾随零,返回整数 “123” 。
遇到一个问题:
这个写法有一个问题,ans.erase(ans.begin()); 会修改ans,但是for循环会遍历ans,导致每次ans都发生变化,也就产生了错误
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string removeTrailingZeros(string num) {
string ans = num;
reverse(ans.begin(), ans.end());
auto it = ans.begin();
for (int i = 0; i < ans.size(); i ++ ) {
if (ans[i] == '0') {
ans.erase(ans.begin());
cout << ans << endl;
} else {
break;
}
}
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
string num = "123000";
string result = removeTrailingZeros(num);
cout << "Result: " << result << endl; // 输出应为 "123"
return 0;
}
正确的解法:
class Solution {
public:
string removeTrailingZeros(string num) {
string ans = num;
reverse(ans.begin(), ans.end());
auto it = ans.begin();
while (it != ans.end()) {
if (*it == '0') {
it = ans.erase(it);
} else {
break;
}
}
reverse(ans.begin(), ans.end());
return ans;
}
};