[英]Maximum number after K swaps using recursion
我必须制作一个 function 最大化(x,k),其中 x 是 integer,k 是最大交换次数,output 是最大交换次数后的最大次数。 还要使用两个函数 swap(s,i,j) 和 sort(s),顾名思义,它们根据索引交换字符串的字符,并分别从高到低排序。 我尝试过,但如果没有另一个变量 i 在最大化 function 中,我就无法做到这一点。 有没有什么办法可以通过传递两个变量 x 和 k 来完成最大化 function 中的变量 i。 这是我的代码:
def swap(s,i,j):
return s[0:i]+s[j]+s[i+1:j]+s[i]+s[j+1:len(s)]
def sort(s):
return "".join((sorted(s)[::-1]))
def maximize(x,k,i):
if k==0 or i==len(str(x)):
return x
s=str(x)
t=sort(s)
if t[i]>s[i]:
j=s.find(t[i],i,len(s))
s=swap(s,i,j)
return maximize(int(s),k-1,i+1)
else:
return maximize(int(s),k,i+1)
print(maximize(223953,2,0))
要获得尽可能高的数字,您需要预先设置最大的数字。 这意味着每一层递归都可以专注于放置第一个数字,并依靠下一层来交换剩余的数字。
def swap(s,i,j):
return s[0:i]+s[j]+s[i+1:j]+s[i]+s[j+1:len(s)]
def sort(s):
return "".join((sorted(s)[::-1]))
def maximize(x,k):
if not k or x<10: return x # stop when no more swaps or no more digits
s = str(x)
if s == sort(s): return x # stop if already at max value
i = s.index(max(s)) # find position of highest digit
if i>0: s = swap(s,0,i) # swap if not already first
suffix = maximize(int(s[1:]),k - (i>0)) # recurse for rest of digits (don't reduce swap count if no swap done)
return int(s[0]+str(suffix)) # combine biggest digit with maximized remainder
print(maximize(223953,2)) # 953223
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.