不含0的给定整数各位数字排序时数组越界该如何修复
问题原因
- 你采用的是计数排序逻辑统计各位数字的出现次数,单个数字的取值范围固定是0~9,和原数字的位数没有关联。你之前把数组长度设置为
s.length()+1,当出现大于等于数组长度的数字(比如数字9,而你数组长度只有2时),就会触发数组下标越界。 - 你当前的遍历逻辑从i=0开始,会把0也拼接进结果,不符合排除0的需求。
修正方案
- 计数数组直接固定长度为10即可,覆盖所有0~9的数字取值
- 拼接结果的时候从i=1开始遍历,自动跳过数字0
- 如果需要得到降序排序的结果,把遍历顺序改成从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
相关产品推荐
相关产品推荐

