2026-03-18:移除十进制表示中的所有零。用go语言,给定一个正整数 n,把它的十进制表示中出现的所有“0”字符删掉,返回剩下数字拼成的新整数。 输入一个正整数 n,去除其十进制形式里的所有

AI17小时前发布 beixibaobao
1 0 0

2026-03-18:移除十进制表示中的所有零。用go语言,给定一个正整数 n,把它的十进制表示中出现的所有“0”字符删掉,返回剩下数字拼成的新整数。

输入一个正整数 n,去除其十进制形式里的所有零,输出去零后的数值。

对正整数 n,剔除表示中的所有 0 位,返回由剩余数字组成的整数。

1 <= n <= 1000000000000000。

输入: n = 1020030。

输出: 123。

解释:

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

题目来自力扣3726。

分步描述:

  1. 从最低位(个位)向最高位逐位处理整数 n 的每一位数字。

  2. 初始时,设定一个乘数 pow10 为 1,它记录在构建结果时当前位应乘的 10 的幂。

  3. 当 n 大于 0 时,循环执行以下操作:
    a. 取 n 对 10 取模,得到当前最低位数字 d。
    b. 将 n 整除 10,移除已处理的最低位。
    c. 如果当前位数字 d 不等于 0,则把 d 乘上当前的 pow10 累加到结果 ans 中,并将 pow10 乘以 10,为处理下一位做准备。
    d. 如果当前位数字 d 等于 0,则直接跳过,不对 ans 和 pow10 做任何改动。

  4. 当 n 变为 0 时,循环结束,ans 中就是所有非零数字从高位到低位的顺序拼接出的整数。

  5. 以 n = 1020030 为例:
    • 初始 n=1020030, ans=0, pow10=1

    • 第1轮:d=0,跳过,n变为102003

    • 第2轮:d=3,ans=0+3×1=3,pow10=10,n变为10200

    • 第3轮:d=0,跳过,n变为1020

    • 第4轮:d=0,跳过,n变为102

    • 第5轮:d=2,ans=3+2×10=23,pow10=100,n变为10

    • 第6轮:d=0,跳过,n变为1

    • 第7轮:d=1,ans=23+1×100=123,pow10=1000,n变为0

    • 循环结束,返回 ans=123。

复杂度分析:

• 总的时间复杂度为 O(log₁₀ n),即 n 的十进制位数,因为循环次数与位数成正比。

• 总的额外空间复杂度为 O(1),只用了固定几个整型变量,与输入规模无关。

Go完整代码如下:

package main
import (
	"fmt"
)
func removeZeros(n int64) (ans int64) {
	pow10 := int64(1)
	for ; n > 0; n /= 10 {
		d := n % 10
		if d > 0 {
			ans += d * pow10
			pow10 *= 10
		}
	}
	return
}
func main() {
	n := int64(1020030)
	result := removeZeros(n)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-
def remove_zeros(n: int) -> int:
    ans = 0
    pow10 = 1
    while n > 0:
        d = n % 10
        if d > 0:
            ans += d * pow10
            pow10 *= 10
        n //= 10
    return ans
def main():
    n = 1020030
    result = remove_zeros(n)
    print(result)
if __name__ == "__main__":
    main()

在这里插入图片描述

C++完整代码如下:

#include <iostream>
long long removeZeros(long long n) {
    long long ans = 0;
    long long pow10 = 1;
    while (n > 0) {
        long long d = n % 10;
        if (d > 0) {
            ans += d * pow10;
            pow10 *= 10;
        }
        n /= 10;
    }
    return ans;
}
int main() {
    long long n = 1020030;
    long long result = removeZeros(n);
    std::cout << result << std::endl;
    return 0;
}

在这里插入图片描述

© 版权声明

相关文章