Ich möchte die nächstgrößere Ganzzahl aus ganzen Zahlen finden, die aus den Zeichen in einer bestimmten Ganzzahl bestehen. Wenn die angegebene Ganzzahl die größte ist, geben Sie -1
zurück.Suche nach der nächstgrößeren Ganzzahl
def next_bigger(n)
perm = n.to_s.chars.sort.permutation.to_a.uniq
to_return = []
perm.each do |x|
to_return.push(x.join)
end
tracker = to_return.find_index(n.to_s)
if to_return[tracker + 1] != nil
return to_return[tracker + 1].to_i
else
-1
end
end
Dieser Code funktioniert. Ich weiß nicht, wie ich es leichter machen kann. Im Moment dauert es ewig, um zu rennen. Wo würdest du anfangen?
Der geeignete Ort ist. –
Ich stimme nicht mit @Mark überein. Das Wesentliche dieser Frage ist, ob es einen besseren Algorithmus als den Einsatz von Brute-Force gibt. So gesehen ist es nicht nur für SO geeignet, sondern es ist eine ziemlich interessante Frage. Christopher, überlege, deine Frage zu ändern, indem du den Code entfernst und nur sagst, dass du versucht hast, ihn zu lösen, indem du Permutationen der Zahlen aufzählst, aber das dauert viel zu lange und frage, ob es eine effizientere Lösung gibt. Ändern Sie in Ihrer ersten Zeile "Zeichen" in "Ziffern" und geben Sie eine nicht zu kleine Beispielnummer und den gewünschten Rückgabewert an. –
Ich gebe zu, es könnte wohl hier zum Thema sein. Aber ich behaupte, dass es mehr bei Codereview ist, da dies im Wesentlichen ein Refactoring für Effizienzfragen ist, die dort üblich sind. Auf der anderen Seite bekommt es mehr Augäpfel hier. –