2026-09-05:计算数字频率得分。用go语言,给定一个整数,先把它每一位上的数字都拆开,统计每个不同数字出现了多少次;然后用每个数字乘

网易专栏1个月前发布 admin
28 0 0

🤖 AI总结

主题

一个计算整数数字频率得分的算法题及多种语言实现。

摘要

本文介绍计算整数数字频率得分的算法,通过逐位统计并加权求和,提供多语言实现,时间复杂度常数级。

关键信息

  • 1 给定整数n,统计每位数字出现次数,计算数字乘以其出现次数之和。
  • 2 提供Go、Python、C++三种实现。
  • 3 时间复杂度O(1),空间复杂度O(1)。

2026-09-05:计算数字频率得分。用go语言,给定一个整数,先把它每一位上的数字都拆开,统计每个不同数字出现了多少次;然后用每个数字乘以其出现次数,再把所有这样的乘积相加,得到的最终总和就是该整数的得分。最后把这个得分作为整数返回。

1 <= n <= 1000000000。

输入: n = 122。

输出: 5。

解释:

数字 1 出现 1 次,贡献为 1 * 1 = 1。

数字 2 出现 2 次,贡献为 2 * 2 = 4。

因此,n 的得分为 1 + 4 = 5。

题目来自力扣3945。

大体步骤如下:

1.初始化统计容器:准备一个长度为 10 的整型数组(或字典),用于记录数字 0~9 各自出现的次数,初始值均为 0。

  • 2.逐位拆分:对给定的整数 n 执行循环,只要 n > 0 就继续:

    • 取当前 n 的末位数字,即n % 10。

  • • 在统计数组中,将该数字对应的计数加 1。

  • • 将 n 除以 10,去掉末位,进入下一位。

    3.计算加权和:循环结束后,遍历所有数字 d 从 0 到 9:

    • 若该数字的计数 freq[d] 大于 0,则计算d * freq[d],并将其累加到总分变量中。

    4.返回结果:输出累加得到的整数,即为该整数的得分。

    需要特别处理的是,如果 n 本身为 0(虽然题目约束 n≥1,但若存在,则统计数组全为 0,得分也为 0)。

    时间复杂度:由于 n 的位数最多为 10 位(因为 n ≤ 1,000,000,000,即 10 亿,最多 10 位数字),循环拆分的次数不超过 10 次,遍历统计数组固定为 10 次,因此总操作次数为常数级别,时间复杂度为O(1)(或表示为 O(log n),其中 log 以 10 为底,但 n 有上限,故可视为常数)。

    额外空间复杂度:仅使用了固定大小的数组(长度为 10)和几个整型变量,不随输入规模变化,因此额外空间复杂度为O(1)。

    Go完整代码如下:

    package main

    import (
    "fmt"
    )

    func digitFrequencyScore(n int) (ans int) {
    for ; n > 0; n /= 10 {
    ans += n % 10
    }
    return
    }

    func main() {
    n := 122
    result := digitFrequencyScore(n)
    fmt.Println(result)
    }

    2026-09-05:计算数字频率得分。用go语言,给定一个整数,先把它每一位上的数字都拆开,统计每个不同数字出现了多少次;然后用每个数字乘

    Python完整代码如下:

    # -*-coding:utf-8-*-

    def digit_frequency_score(n: int) -> int:
    ans = 0
    while n > 0:
    ans += n % 10
    n //= 10
    return ans

    def main():
    n = 122
    result = digit_frequency_score(n)
    print(result)

    if __name__ == "__main__":
    main()

    2026-09-05:计算数字频率得分。用go语言,给定一个整数,先把它每一位上的数字都拆开,统计每个不同数字出现了多少次;然后用每个数字乘

    C++完整代码如下:

      
    

    int digitFrequencyScore(int n) {
    int ans = 0;
    while (n > 0) {
    ans += n % 10;
    n /= 10;
    }
    return ans;
    }

    int main() {
    int n = 122;
    int result = digitFrequencyScore(n);
    std::cout << result << std::endl;
    return 0;
    }

    2026-09-05:计算数字频率得分。用go语言,给定一个整数,先把它每一位上的数字都拆开,统计每个不同数字出现了多少次;然后用每个数字乘

    我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

    © 版权声明

    相关文章