我试图在一个在线挑战网站上解决这个挑战,但我有点卡住了。这里有更多关于这个问题的信息:
给你一个整数数组。以这样的方式对其进行排序,如果 a 在 b 之前,则 a 的数根小于或等于 b 的数根。如果两个数字具有相同的数根,则较小的(通常意义上的)应该排在第一位。例如,4 和 13 具有相同的数字根,但是 4 < 13 因此 4 在任何 digitRoot 排序中都出现在 13 之前。
这是我的输出:
Input: a: [13, 20, 7, 4]
Output: [20, 13, 4, 7]
Expected Output: [20, 4, 13, 7]
这是我的代码:
int digitRoot(int b) {
int c, sum = 0;
while(b>0) {
c=b%10;
sum=sum+c;
b=b/10;
}
return sum;
}
int[] digitRootSort(int[] a) {
HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
int[] a1 = new int[a.length];
for (int i=0;i<a.length;i++) {
a1[i]=digitRoot(a[i]);
if (map.containsKey(a1[i])) {
ArrayList<Integer> temp = map.get(a1[i]);
temp.add(a[i]);
map.put(a1[i], temp);
}
else {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(a[i]);
map.put(a1[i], list);
}
}
Arrays.sort(a1);
for (int i=0;i<a.length;i++) {
ArrayList<Integer> temp = map.get(a1[i]);
for(int j=0;j<temp.size();j++) {
a[i]=temp.get(j);
if (j<temp.size()-1)
i++;
}
}
return a;
}
但是如果我改变 map.put(a1[i], temp); 到 map.put(a1[i], Collections.sort(temp));,我收到这个错误:file.java 在第 24 行:
error: 'void' type not allowed here
map.put(a1[i], Collections.sort(list));
qq_笑_17
幕布斯6054654
MYYA
相关分类