给一个数组,想象一下它的全排列,求出这个数组在全排列中的下一个排列
编程思路:
1、顺序是按从小到大排序的,即把index 记录下来,pair=【【x1,y1】,【x2,y2】………【xn,yn】】
2、新建一个变量pos=pair【-1】【0】+1,也就是最后一个小大顺序的第一个位置
pair列表里的最后一个列表代表的array两个位置元素互换
3、array里的元素从pos开始,从小到大排序
上完整代码:
1 class Solution(): 2 def next_series(self,array): 3 pair=[] 4 ls=len(array) 5 for i in range(ls): 6 for j in range(i+1,ls): 7 if array[i]<array[j]: 8 pair.append([i,j]) 9 pos=0 10 if len(pair)>0: 11 pos=pair[-1][0]+1 12 self.swap(array,pair[-1][0],pair[-1][1]) 13 for i in range(pos,ls): 14 for j in range(i+1,ls): 15 if array[i]>array[j]: 16 self.swap(array,i,j) 17 return(array) 18 19 def swap(self,array,x,y): 20 array[x],array[y]=array[y],array[x] 21 22 s=Solution() 23 print(s.next_series([1,2,3,5,6]))
易错点:
swap(array,x,y)不能简化成swap(x,y),
1 #正确做法 2 def swap(array,x,y): 3 array[x],array[y]=array[y],array[x] 4 a=[1,2,3,4,5] 5 swap(a,3,4) 6 print(a)
1 #在函数中使用全局变量,不是个好习惯,不推荐 2 def swap(x,y): 3 array[x],array[y]=array[y],array[x] 4 array=[1,2,3,4,5] 5 swap(3,4) 6 print(array)
1 #运行不正确,列表a的34位没有调换 2 def swap(x,y): 3 x,y=y,x 4 a=[1,2,3,4,5] 5 swap(a[3],a[4]) 6 print(a)
1 #运行倒是正确了,就是太麻烦了 2 def swap(x,y): 3 x,y=y,x 4 return(x,y) 5 a=[1,2,3,4,5] 6 a[3],a[4]=swap(a[3],a[4]) 7 print(a)
运行无故障,glad to help you,欢迎留言交流。