亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

某個正整數的數根定義為其所有數字之和

某個正整數的數根定義為其所有數字之和

藍山帝景 2021-11-17 17:23:59
我試圖在一個在線挑戰網站上解決這個挑戰,但我有點卡住了。這里有更多關于這個問題的信息:給你一個整數數組。以這樣的方式對其進行排序,如果 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));
查看完整描述

3 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

只需Collections.sort(temp);在最后一個 for 循環中包含這個,這是必要的,因為多個數字可以具有相同的 digitRoot 并且應該放在已排序的列表中。


for (int i=0;i<a.length;i++) {

        ArrayList<Integer> temp = map.get(a1[i]);

        Collections.sort(temp);

        for(int j=0;j<temp.size();j++) {

            a[i]=temp.get(j);

            if (j<temp.size()-1)

                i++;

        }

    }



Input: a: [13, 20, 7, 4]

Output: [20, 4, 13, 7]

編輯:關于錯誤


因為在put(a1[i], Collections.sort(list))put 方法中是期望的put(int, List),但是你給了它put(int, void),因為返回類型Collections.sort()是void,你只需要先對列表進行排序然后再通過


查看完整回答
反對 回復 2021-11-17
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

您似乎正在嘗試插入集合的排序值。Collections.sort(List),無論好壞,就地對該列表進行排序并且不返回任何內容。先對列表進行排序,然后將其插入到地圖中。


查看完整回答
反對 回復 2021-11-17
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

放入地圖時不需要對數組進行排序。相反,您可以在最后一個循環中檢索時對其進行排序:


    Arrays.sort(a1);

    for (int i=0;i<a.length;i++) {

        ArrayList<Integer> temp = map.get(a1[i]);

        Collections.sort(temp);

        for(int j=0;j<temp.size();j++) {

            a[i]=temp.get(j);

            if (j<temp.size()-1)

                i++;

        }

    }

如果您需要在放入地圖時進行排序,您應該使用 SortedSet 因為它會自動保持元素排序:


int[] digitRootSort(int[] a) {

    HashMap<Integer, TreeSet<Integer>> map = new HashMap<Integer, TreeSet<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])) {

            TreeSet<Integer> set = map.get(a1[i]);

            set.add(a[i]);

            map.put(a1[i], set);

        } else {

            TreeSet<Integer> set = new TreeSet<Integer>();

            set.add(a[i]);

            map.put(a1[i], set);

        }

    }

    Arrays.sort(a1);

    for (int i = 0; i < a.length;) {

        TreeSet<Integer> set = map.get(a1[i]);

        for (int j : set) {

            a[i] = j;

            i++;

        }

    }

    return a;

}

但是,通過使用適當的比較器,還有一種更簡單的方法來處理排序集:


int[] digitRootSort(int[] a) {

    SortedSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {


        @Override

        public int compare(Integer a, Integer b) {

            int result = Integer.compare(digitRoot(a), digitRoot(b));

            result = result == 0 ? Integer.compare(a, b) : result;

            return result;

        }

    });


    for (int i : a) {

        set.add(i);

    }


    int i = 0;

    for (int j : set) {

        a[i++] = j;

    }


    return a;

}


查看完整回答
反對 回復 2021-11-17
  • 3 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號