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

举报
福大大架构师每日一题 发表于 2026/03/18 07:42:23 2026/03/18
【摘要】 2026-03-18:移除十进制表示中的所有零。用go语言,给定一个正整数 n,把它的十进制表示中出现的所有“0”字符删掉,返回剩下数字拼成的新整数。输入一个正整数 n,去除其十进制形式里的所有零,输出去零后的数值。对正整数 n,剔除表示中的所有 0 位,返回由剩余数字组成的整数。1 <= n <= 1000000000000000。输入: n = 1020030。输出: 123。解释:从 ...

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;
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。