跳转至

3726. 移除十进制表示中的所有零

题目描述

给你一个正整数n

返回一个整数,该整数是将 n 的十进制表示中所有的零都移除后得到的结果。

 

示例 1:

输入: n = 1020030

输出: 123

解释:

从 1020030 中移除所有的零后,得到 123。

示例 2:

输入: n = 1

输出: 1

解释:

1 的十进制表示中没有零,因此结果为 1。

 

提示:

  • 1 <= n <= 1015

解法

方法一:模拟

我们从 \(n\) 的最低位开始,逐位检查每个数字。如果该数字不为零,则将其添加到结果中。我们还需要一个变量来跟踪当前的位数,以便正确地构建最终的整数。

具体来说,我们可以使用一个变量 \(k\) 来表示当前的位数,然后从最低位开始逐位检查每个数字。如果该数字不为零,则将其乘以 \(k\) 并加到结果中,同时将 \(k\) 乘以 10,以便在下一位时使用。

最终,我们将得到一个不包含零的整数。

时间复杂度 \(O(d)\),其中 \(d\) 是整数 \(n\) 的位数。空间复杂度 \(O(1)\)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution:
    def removeZeros(self, n: int) -> int:
        k = 1
        ans = 0
        while n:
            x = n % 10
            if x:
                ans = k * x + ans
                k *= 10
            n //= 10
        return ans
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution {
    public long removeZeros(long n) {
        long k = 1;
        long ans = 0;
        while (n > 0) {
            long x = n % 10;
            if (x > 0) {
                ans = k * x + ans;
                k *= 10;
            }
            n /= 10;
        }
        return ans;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Solution {
public:
    long long removeZeros(long long n) {
        long long k = 1;
        long long ans = 0;
        while (n > 0) {
            long x = n % 10;
            if (x > 0) {
                ans = k * x + ans;
                k *= 10;
            }
            n /= 10;
        }
        return ans;
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func removeZeros(n int64) (ans int64) {
    k := int64(1)
    for n > 0 {
        x := n % 10
        if x > 0 {
            ans = k*x + ans
            k *= 10
        }
        n /= 10
    }
    return
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
function removeZeros(n: number): number {
    let k = 1;
    let ans = 0;
    while (n) {
        const x = n % 10;
        if (x) {
            ans = k * x + ans;
            k *= 10;
        }
        n = Math.floor(n / 10);
    }
    return ans;
}

评论