跳转至

2710. 移除字符串中的尾随零

题目描述

给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num

 

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= num.length <= 1000
  • num 仅由数字 09 组成
  • num 不含前导零

解法

方法一:遍历

我们可以从后往前遍历字符串,遇到第一个不是 0 的字符时停止遍历,然后返回从头开始到这个字符的子串。

时间复杂度 $O(n)$,其中 $n$ 是字符串的长度。忽略答案字符串的空间消耗,空间复杂度 $O(1)$。

1
2
3
class Solution:
    def removeTrailingZeros(self, num: str) -> str:
        return num.rstrip("0")
1
2
3
4
5
6
7
8
9
class Solution {
    public String removeTrailingZeros(String num) {
        int i = num.length() - 1;
        while (num.charAt(i) == '0') {
            --i;
        }
        return num.substring(0, i + 1);
    }
}
1
2
3
4
5
6
7
8
9
class Solution {
public:
    string removeTrailingZeros(string num) {
        while (num.back() == '0') {
            num.pop_back();
        }
        return num;
    }
};
1
2
3
4
5
6
7
func removeTrailingZeros(num string) string {
    i := len(num) - 1
    for num[i] == '0' {
        i--
    }
    return num[:i+1]
}
1
2
3
4
5
6
7
function removeTrailingZeros(num: string): string {
    let i = num.length - 1;
    while (num[i] === '0') {
        --i;
    }
    return num.substring(0, i + 1);
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
impl Solution {
    pub fn remove_trailing_zeros(num: String) -> String {
        let mut i = num.len() - 1;

        while num.chars().nth(i) == Some('0') {
            i -= 1;
        }

        num[..i + 1].to_string()
    }
}

方法二

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
impl Solution {
    pub fn remove_trailing_zeros(num: String) -> String {
        num.chars()
            .rev()
            .skip_while(|&c| c == '0')
            .collect::<String>()
            .chars()
            .rev()
            .collect::<String>()
    }
}

评论