[Sart]最大数

2214 ワード

最初の試行で失敗したソース
public static String solution(int[] numbers) {
        String answer = "";

        String [] temp = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            temp[i] = Integer.toString(numbers[i]);
        }
        Arrays.sort(temp);
        String s = "";
        for (int j = temp.length; j > 0; j--) {
            s += temp[j-1];
        }
        //System.out.println(s);
        answer = s;
        return answer;
    }
文字列を並べ替えると先頭の数字で並べ替えるので、大きい数字を順番に組み合わせて所望の結果を出力できます.でも.
int [] numbers2 = {3, 30, 34, 5, 9};
この箱は9534330のはずですが、9534303が出てきました.
諸葛亮と他の人の草は我慢して、やっと通過しました
sortメソッドで使用するcompareメソッドは,比較文字列を上書きしてソートする方法である.
compareToでは数値比較や文字列比較ができますが、ここでは文字列の大きさを計算する必要があるので文字列を比較!
数値型比較と文字列比較の戻り値は異なり、数値型比較では同じ値が0であり、基準値が比較対象-1より小さい場合、1より大きい場合は1を返します.
次に、ソース関数とリファレンス関数を示します.
public static String solution(int[] numbers) {
        String answer = "";

        String [] temp = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            temp[i] = Integer.toString(numbers[i]);
        }
        // 정렬
        Arrays.sort(temp, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                System.out.println((o2 + o1) + " " + (o1 + o2));
                return ((o2 + o1).compareTo(o1 + o2));
            }
        });

        if(temp[0].equals("0")) {
            return "0";
        }

        for (String a : temp) {
            answer += a;
        }

        return answer;
    }
int compareTo(String anotherString)
기준값과 비교대상의 값을 비교하여 0 또는 그 외의 양수나 음수를 반환
- 문자열이 같은 경우 0 리턴
  ex) ab.compareTo(ab) = 0
- 비교대상이 문자열에 포함되어 있는 경우 길이의 차 리턴
  ex) abcd.compareTo(ab) = 2
- 다른 문자열의 경우 아스키코드 값의 차 리턴
  ex) abcd.compareTo(zyxvw) = -25
苦悩の跡を付ける