プログラマの整数降順でソート


質問する


関数解は、パラメータ入力として整数nを受け入れる.nの各ビット数を大きいから小さい順に並べ替えてください.例えば、nが118372の場合、873211が返される.

せいげんじょうけん

  • nは、8000000000を超える自然数です.
  • I/O例



    に答える

    import java.util.Arrays;
    import java.util.Comparator;
    
    public class ReverseSort {
        public static void main(String[] args) {
            ReverseSort t = new ReverseSort();
            long l = 118372;
            long solution = t.solution(l);
            System.out.println("solution = " + solution);
        }
        public long solution(long l) {
            long answer = 0;
            //long을 받아서 decs으로 정령해야함
            char[] chars = String.valueOf(l).toCharArray();
            int leng = chars.length;
            Integer[] arr = new Integer[leng];
    
            for(int i=0; i<leng; i++){
                arr[i] = chars[i] - '0';    //숫자로 변환
            }
    
            Arrays.sort(arr, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    if(o1>o2) return 1;
                    return -1;
                }
            });
    
            for(int i=0; i<leng; i++){
                answer += (long) (arr[i] * Math.pow(10,i));
            }
            return answer;
        }
    }
    JavaのsortとComparatorで解ける簡単な質問です.でもどうして片付けたの?Comparatorの利用に若干の制限があるので、整理しておきたいと思います!
  • 基本資料型int、long、double、charなどは利用できません!
  • WrapperクラスString、Integerなどを使うべき!
  • この上の注意点を知って使ってください.普段はStringで問題を解くときはほとんどComparatorを使うので、実際に並べ替えているときに資料型の渋滞に巻き込まれて憂鬱になります.その時は上の注意点が分かれば簡単に解決できます!
    ComparatorはWrapperクラスにのみ適用されます!