2026-01-27: 出现频率最低的数字。用go语言, 给定一个整数 n, 统
2026-01-27:出现频率最低的数字。用go语言,给定一个整数 n,统计其十进制表示中每个数字出现的次数,找出出现次数最少的那个数字;若有多位并列,则取数值最小的那一位。把该数字作为整数返回。
输入: n = 723344511。
输出: 2。
解释:
在 n 中,出现频率最低的数字是 7、2 和 5,它们都只出现了一次。
题目来自力扣3663。
步骤一:统计数字出现次数
首先,程序需要统计整数 n 的十进制表示中每个数字(0-9)出现的次数。
1. 初始化计数器:创建一个长度为10的整数数组 cnt,初始值全为0。数组的索引对应数字0到9,其值对应该数字出现的次数。
2. 遍历每一位数字:通过一个循环来处理整数 n。只要 n 大于0,就重复以下操作:
• 提取末位数字:通过取模运算 n % 10 得到 n 的个位数字。
• 更新计数器:将计数器数组 cnt 中对应这个数字的计数值加1。
• 移除已处理位:通过整数除法 n / 10 去掉 n 的个位数,为处理下一位做准备。
3. 处理完成:当 n 变为0时,循环结束。此时,数组 cnt 中已经记录了0-9每个数字在原始整数中出现的次数。需要注意的是,如果某个数字没有出现过,它的计数将保持为0。
步骤二:查找出现次数最少的数字
在得到频率统计后,下一步是找出出现次数最少的数字。
1. 初始化查找变量:
• minC:用于记录当前找到的最小出现次数。初始值被设置为一个非常大的数(math.MaxInt),以确保第一次遇到出现过的数字时,其次数肯定比 minC 小。
• ans:用于记录当前找到的、满足条件(出现次数等于 minC)的数字。
2. 遍历计数器数组:遍历数组 cnt 的每一个位置(即数字0到9)。
3. 判断与更新:对于每个数字 i(即索引 i),如果它的计数值 c 大于0(表示该数字确实出现过),则进行以下判断:
• 发现更小频率:如果 c 小于当前的最小频率 minC,说明找到了出现次数更少的数字。此时,更新 minC 为这个更小的值 c,同时将答案 ans 更新为当前数字 i。
• 处理并列情况:如果 c 等于当前的最小频率 minC,说明出现了并列情况。这时,根据题目要求“取数值最小的那一位”,程序会比较当前数字 i 和当前答案 ans 的大小。如果 i 小于 ans,则更新 ans 为 i。你提供的代码中省略了这一步的逻辑,但根据题目描述,这是必要的一环。
4. 返回结果:遍历完成后,变量 ans 中存储的就是出现次数最少且数值最小的数字,将其作为结果返回。
⏱️ 复杂度分析
• 总的时间复杂度:O(d),其中 d 是整数 n 的十进制位数。
第一步统计次数需要循环 d 次(每次循环处理一位数字)。
第二步查找最小频率数字需要循环固定的10次(因为数字只有0-9共10种可能)。
因此,总时间与数字 n 的位数成正比。
• 总的额外空间复杂度:O(1),即常数空间。
程序只使用了一个固定大小的数组 cnt(长度10)和几个整型变量。这些空间需求不随输入整数 n 的大小而增长。
Go完整代码如下:
package main
import (
"fmt"
"math"
)
func getLeastFrequentDigit(n int) (ans int) {
// 统计每个数字的出现次数
cnt := [10]int{}
for n > 0 {
cnt[n]++
n /= 10
}
// 找出现次数最小的数字
minC := math.MaxInt
for i, c := range cnt {
if c > 0 && c
minC = c
ans = i
}
}
return
}
func main {
n := 723344511
result := getLeastFrequentDigit(n)
fmt.Println(result)
}

Python完整代码如下:
# -*-coding:utf-8-*-
import sys
def get_least_frequent_digit(n: int) -> int:
# 统计每个数字的出现次数
cnt = [0] * 10
while n > 0:
cnt[n % 10] += 1
n //= 10
# 找出现次数最小的数字
min_c = sys.maxsize
ans = 0
for i, c in enumerate(cnt):
if c > 0 and c
min_c = c
ans = i
return ans
if __name__ == "__main__":
n = 723344511
result = get_least_frequent_digit(n)
print(result)

C++完整代码如下:
#include
#include
int getLeastFrequentDigit(int n) {
// 统计每个数字的出现次数
int cnt[10] = {0};
while (n > 0) {
cnt[n % 10]++;
n /= 10;
}
// 找出现次数最小的数字
int minC = INT_MAX;
int ans = 0;
for (int i = 0; i
if (cnt[i] > 0 && cnt[i]
minC = cnt[i];
ans = i;
}
}
return ans;
}
int main {
int n = 723344511;
int result = getLeastFrequentDigit(n);
std::cout
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。
欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
热点资讯
- 中年男人买牛仔裤, 别只盯
- 分享一波中长系列美甲
- 女人想要拥有幸福的婚
- 喜讯! 鲁能四位国脚强援回
- 美国4月就业人数增长超过
- 乌首都基辅遭空袭4人死亡
- 2026-01-27: 出现频率最低的
- 杨幂, 海边浪漫唯美大片
- 辛云来新剧翻车引出陈年
- 狗狗找了个小跟班,雪貂
