from itertools import permutations
def next_smaller(num):
pernum = [int(''.join(x)) for x in list(permutations(str(num))) if x[0]!='0' ]
temp = [i - num for i in pernum]
# 获取最大负数 和最小正数
max_temp = max([n for n in temp if n < 0] if [n for n in temp if n < 0] else [0])
min_temp = min([n for n in temp if n > 0] if [n for n in temp if n > 0] else [0])
result = pernum[temp.index(min(max_temp, min_temp))]
return -1 if result == num else result
assert next_smaller(21) == 12
assert next_smaller(2021) == 2012
assert next_smaller(9) == -1
assert next_smaller(135) == -1
def next_smaller(num: int) -> int:
s = str(num)
if ''.join(sorted(s)) == s or len(s) == 1:
return -1
nums = [int(''.join(x)) for x in list(permutations(s))]
result = max([x for x in nums if x < int(s)])
return result
assert next_smaller(21) == 12
assert next_smaller(2021) == 2012
assert next_smaller(9) == -1
assert next_smaller(135) == -1