You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不含0的给定整数各位数字排序时数组越界该如何修复

问题原因

  • 你采用的是计数排序逻辑统计各位数字的出现次数,单个数字的取值范围固定是0~9,和原数字的位数没有关联。你之前把数组长度设置为s.length()+1,当出现大于等于数组长度的数字(比如数字9,而你数组长度只有2时),就会触发数组下标越界。
  • 你当前的遍历逻辑从i=0开始,会把0也拼接进结果,不符合排除0的需求。

修正方案

  1. 计数数组直接固定长度为10即可,覆盖所有0~9的数字取值
  2. 拼接结果的时候从i=1开始遍历,自动跳过数字0
  3. 如果需要得到降序排序的结果,把遍历顺序改成从9到1即可

修正后代码

String s = String.valueOf(num);
// 数字取值范围为0~9,固定用长度10的数组存储每个数字的出现次数
int[] arr = new int[10];    
while(num != 0) {
    arr[(int) num % 10]++;
    num = num / 10;
}
long result = 0;
// 从1开始遍历直接跳过0,当前为升序排序逻辑
for(int i = 1 ; i < arr.length ; i++){
    for(int j = 0 ; j < arr[i] ; j++) {
        result = result * 10;
        result = result + i;
    }
}
// 若输入整数本身就是0,返回结果为0符合预期
return result;

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 15:00:03