1. 问题分析与解法思路
今天我们来解决一个有趣的数字统计问题:给定一个整数n,找出其十进制表示中出现频率最低的数字。如果有多个数字出现次数相同且都是最少,则返回其中数值最小的那个数字。
这个问题看似简单,但涉及到了几个关键点:
- 如何高效地统计数字出现的频率
- 如何处理并列最少出现次数的情况
- 如何确保算法的时间复杂度和空间复杂度最优
1.1 核心算法设计
我选择使用一个长度为10的数组来统计0-9每个数字出现的次数。这种方法简单直接,空间复杂度固定为O(1),因为无论输入数字多大,我们只需要10个计数位置。
统计数字出现频率的步骤:
- 初始化一个全0的计数数组
- 通过取模运算(n%10)获取当前最低位数字
- 对应计数位置加1
- 通过整数除法(n/10)去掉已处理的最低位
- 重复上述过程直到n变为0
1.2 处理并列情况的策略
当多个数字出现次数相同且都是最少时,我们需要返回数值最小的那个。这需要在查找最小频率时:
- 记录当前最小频率值
- 当遇到更小频率时更新最小频率和结果数字
- 当遇到相同频率时,比较数字大小,保留较小的那个
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Go语言实现详解
2.1 完整代码实现
go复制package main
import (
"fmt"
"math"
)
func getLeastFrequentDigit(n int) int {
// 统计每个数字的出现次数
cnt := [10]int{}
for n > {
digit := n % 10
cnt[digit]++
n /= 10
}
// 找出现次数最小的数字
minCount := math.MaxInt32
result :=
for digit, count := range cnt {
if count > && count < minCount {
minCount = count
result = digit
} else if count == minCount && digit < result {
result = digit
}
}
return result
}
func main() {
n := 7
