Easy
题目描述
给定一个用字符串表示的正整数 num,返回移除尾随零后的字符串。
示例 1:
输入:num = "51230100"
输出:"512301"
解释:整数 "51230100" 有 2 个尾随零,移除它们返回整数 "512301"。
示例 2:
输入:num = "123"
输出:"123"
解释:整数 "123" 没有尾随零,返回整数 "123"。
约束条件:
1 <= num.length <= 1000num只包含数字num没有前导零
提示:
- 在
num中找到最后一个非零数字。
解题思路
这是一道简单的字符串处理题目,核心思路是从字符串尾部开始,移除所有连续的零字符。
解法分析:
从右往左遍历法:从字符串的末尾开始遍历,找到第一个非零字符的位置,然后截取从开始到该位置的子串。
使用内置函数法:许多编程语言提供了去除尾随字符的内置函数,如 Python 的
rstrip(),可以直接使用。双指针法:设置右指针从末尾开始,向左移动直到遇到非零字符,然后截取子串。
推荐解法:从右往左遍历法,因为它直观易懂,时间复杂度最优,且适用于所有编程语言。
算法步骤:
- 从字符串末尾开始遍历
- 找到第一个非零字符的位置
- 返回从开始到该位置(包含)的子串
这种方法简单直接,一次遍历就能解决问题。
代码实现
class Solution {
public:
string removeTrailingZeros(string num) {
int end = num.length() - 1;
while (end >= 0 && num[end] == '0') {
end--;
}
return num.substr(0, end + 1);
}
};
class Solution:
def removeTrailingZeros(self, num: str) -> str:
return num.rstrip('0')
public class Solution {
public string RemoveTrailingZeros(string num) {
int end = num.Length - 1;
while (end >= 0 && num[end] == '0') {
end--;
}
return num.Substring(0, end + 1);
}
}
/**
* @param {string} num
* @return {string}
*/
var removeTrailingZeros = function(num) {
let end = num.length - 1;
while (end >= 0 && num[end]
复杂度分析
| 复杂度类型 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 最优解法 | O(n) | O(1) |
说明:
- 时间复杂度:O(n),其中 n 是字符串长度。最坏情况下需要遍历整个字符串。
- 空间复杂度:O(1),只使用了常数级别的额外空间(不计算返回值的空间)。