#编程: 给一个整数N,可以取其中任意一段反转排列,求反转后最大可能值。
# 例如:N= 5083 反转508 得到 8053 为最大。 N=959489 反转 59489 得到 998495 为最大. N =401, 不用反转, 最大401.
# 运行结果及报错内容
#我的解答思路和尝试过的方法
#一个 Java, python, C++ 任选编程; Input: N output: 最大值
#编程: 给一个整数N,可以取其中任意一段反转排列,求反转后最大可能值。
# 例如:N= 5083 反转508 得到 8053 为最大。 N=959489 反转 59489 得到 998495 为最大. N =401, 不用反转, 最大401.
# 运行结果及报错内容
#我的解答思路和尝试过的方法
#一个 Java, python, C++ 任选编程; Input: N output: 最大值
给一种递归解决方案:
import numpy as np
def turn_and_max(src,N,start=0):
lst = [int(w) for w in N]
max_index = np.where(lst==np.max(lst))
if max_index[0][0]!=0:
nums = []
for mi in max_index[0]:
if mi<len(N)-1:
new_N = N[:mi+1][::-1]+N[mi+1:]
else:
new_N = N[::-1]
nums.append(int(new_N))
print(f'反转后的最大数字:{src[0:start]+str(max(nums))}')
else:
start +=1
turn_and_max(src, N[1:],start)
N = input('请输入N:').strip()
turn_and_max(N,N)