task3 #2
@ -1,22 +1,34 @@
|
|||||||
def next_bigger(n):
|
def next_bigger(n):
|
||||||
|
# get number as digits in list
|
||||||
digits = [int(x) for x in list(str(n))]
|
digits = [int(x) for x in list(str(n))]
|
||||||
|
|
||||||
|
# find index of pivot. return -1 if there is no pivot, meaning number is alreadig biggest
|
||||||
pivot = -1
|
pivot = -1
|
||||||
for i in range(1, len(digits)):
|
for i in range(1, len(digits)):
|
||||||
if digits[-1] > digits[-2 * i]:
|
if digits[-i] > digits[-i - 1]:
|
||||||
pivot = -2 * i
|
pivot = -i - 1
|
||||||
break
|
break
|
||||||
|
|
||||||
if pivot == -1:
|
if pivot == -1:
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
# find the smallest digit to the right that is bigger than the pivot
|
||||||
right = digits[pivot + 1 :]
|
right = digits[pivot + 1 :]
|
||||||
swamp = right.index(min(right))
|
swap = right.index(min([x for x in right if x > digits[pivot]]))
|
||||||
print(digits)
|
|
||||||
digits[pivot], digits[len(digits) - len(right) + swamp] = (
|
# swap pivot with found digit
|
||||||
right[swamp],
|
digits[pivot], digits[len(digits) - len(right) + swap] = (
|
||||||
|
right[swap],
|
||||||
digits[pivot],
|
digits[pivot],
|
||||||
)
|
)
|
||||||
return digits
|
|
||||||
|
# sort right side of new swapped pivot and replace it at the end
|
||||||
|
right = digits[pivot + 1 :]
|
||||||
|
right.sort()
|
||||||
|
digits[pivot + 1 :] = right
|
||||||
|
|
||||||
|
# return number
|
||||||
|
return int("".join([str(x) for x in digits]))
|
||||||
|
|
||||||
|
|
||||||
print(next_bigger(534976))
|
print(next_bigger(5113455566888))
|
||||||
|
|||||||
@ -8,4 +8,8 @@ def test_next_bigger():
|
|||||||
assert next_bigger(2017) == 2071
|
assert next_bigger(2017) == 2071
|
||||||
assert next_bigger(414) == 441
|
assert next_bigger(414) == 441
|
||||||
assert next_bigger(144) == 414
|
assert next_bigger(144) == 414
|
||||||
assert next_bigger(84876644310) == 86013446784
|
assert next_bigger(1234567890) == 1234567908
|
||||||
|
assert next_bigger(59884848459853) == 59884848483559
|
||||||
|
assert next_bigger(7600201336) == 7600201363
|
||||||
|
assert next_bigger(5113455566888) == 5113455568688
|
||||||
|
assert next_bigger(4769560370633) == 4769560373036
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user