leetCodeの「179. Largest Number」を解いた。
https://leetcode.com/problems/largest-number/
この問題を解く過程で、苦手な Java の Comparator の実装を行う必要があったので、コードにコメントを詳しく書いた。今後の参考のために、書いたコードをここに残しておく。
public String largestNumber(int[] nums) { List<String> numStrs = new ArrayList<>(); for (int num : nums) { numStrs.add(Integer.toString(num)); } // Comparator をラムダ式で表現している。 // a, b と入力があったとして、 // a < b の時 (a -> b の順にしたい時)、右側の式はマイナス値を返し、 // a > b の時 (b -> a の順にしたい時)、右側の式はプラス値を返すように実装する。 numStrs.sort((a, b) -> (b + a).compareTo(a + b)); // 例えば、a = 30, b = 3 とする。 // この時、"330".compareTo("303") -> プラス値 となるため、 // b -> a の順となる。意図通り、3 30 という順になる。 StringBuilder sb = new StringBuilder(); for (String numStr : numStrs) { sb.append(numStr); } // For edge case. if (sb.charAt(0) == '0') { return "0"; } else { return sb.toString(); } }