Easy

题目描述

给定一个用字符串表示的正整数 num,返回移除尾随零后的字符串。

示例 1:

输入:num = "51230100"
输出:"512301"
解释:整数 "51230100" 有 2 个尾随零,移除它们返回整数 "512301"。

示例 2:

输入:num = "123"
输出:"123"
解释:整数 "123" 没有尾随零,返回整数 "123"。

约束条件:

  • 1 <= num.length <= 1000
  • num 只包含数字
  • num 没有前导零

提示:

  • num 中找到最后一个非零数字。

解题思路

这是一道简单的字符串处理题目,核心思路是从字符串尾部开始,移除所有连续的零字符。

解法分析:

  1. 从右往左遍历法:从字符串的末尾开始遍历,找到第一个非零字符的位置,然后截取从开始到该位置的子串。

  2. 使用内置函数法:许多编程语言提供了去除尾随字符的内置函数,如 Python 的 rstrip(),可以直接使用。

  3. 双指针法:设置右指针从末尾开始,向左移动直到遇到非零字符,然后截取子串。

推荐解法:从右往左遍历法,因为它直观易懂,时间复杂度最优,且适用于所有编程语言。

算法步骤:

  1. 从字符串末尾开始遍历
  2. 找到第一个非零字符的位置
  3. 返回从开始到该位置(包含)的子串

这种方法简单直接,一次遍历就能解决问题。

代码实现

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),只使用了常数级别的额外空间(不计算返回值的空间)。

相关题目