[プログラマー(Ruby)]2大数

5255 ワード


📌 レベル2最大数


💻 言語:Ruby


🗒️ 問題の説明


0または正の整数を指定すると、最大の整数を見つけます.
例えば、与えられた整数が[6,10,2]である場合、最大数が6210である[610261010621026102106]を作成することができる.
パラメータに指定された配列番号が0または正の整数の場合、作成可能な最大番号を文字列に変換して戻すソリューション関数を作成します.
せいげんじょうけん
numbersの長さは1または10万以下です.
numbersの要素は1000を超えない.
答えが大きすぎるかもしれませんが、文字列に置き換えて返してください.
input
numbers = [6, 10, 2] => "6210"
numbers = [3, 30, 34, 5, 9] => "9534330"

▼▼解決コード

def solution(numbers)
    number_permutations = numbers.permutation(numbers.length).to_a
    answer = number_permutations.map(&:join).map(&:to_i).max.to_s
    return answer
end
上のコードにruntimeerrorが表示され、以下のように変更されました.
def solution(numbers)
    return numbers.permutation.map(&:join).uniq.max
end
テストコードはパスしましたが、タイムアウトしたので、コードを再修正しました.
def solution(numbers)
    results = numbers.map(&:to_s).sort { |a, b|
      a = a.length == 1 ? a * 3 : a
      a = a.length == 2 ? a + "0" : a
      b = b.length == 1 ? b * 3 : b
      b = b.length == 2 ? b + "0" : b
      b <=> a
    }
    return results.join
end
上記のコードを使用すると、タイムアウトのエラーは発生しません.
正解率は40に近い...
もう一度考えてみたほうがいい.
課題1
[40, 403] => 40403
[1000, 0, 5, 99, 100] => "99510010000"
[0, 5, 10, 15, 20] => "52015100"
解決する
サムネイル:https://www.klipfolio.com/blog/algorithm-in-six-steps