[プログラマー]最大数のパイソン

2072 ワード

どうして毎回桁を切って比較できるのか...?悩んだあげく、他の人の解答を见るのをあきらめた.
見るからにでたらめだ...かっこいいです.コードは本当に驚くべきものです.
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))
stringに変えて比較したいのですが...x*3でその問題を解決するなんて、天才だ.
  • mapを使用してlistの要素を文字列にマッピングし、list
  • を返します.
    各文字列は
  • lambda x:x*3->numパラメータを3回繰り返します
    なぜ
  • x*3を選んだのか->numの買収値が1000以下であるため、3桁に調整して比較する.
    9、991なら2回繰り返しても9991は前に並んでいます.
  • 文字列を比較してソート
    文字列比較はASCII値でソートされます.
    666 101010222を最初の比較として
    6=86,1=81,2=82なので1<2<6です.
  • 降順で
  • 、逆=True
  • ''.文字列
  • をjoin(num)でマージ
  • intに変換してstrに変換
    すべての値が0の場合(たとえば>「000」)に処理します.