字典序 Lexicographical Order

求下一个字典序的方法
1.求 i = max{j | p[j – 1] < p[j]} (找最后一个正序);
2.求 j = max{k| p[i – 1] < p[k]} (找最后大于 p[i – 1] 的);
3.交换 p[i – 1] 与 p[j]得到 p[1] … p[i-2] p[j] p[i] p[i+1] … p[j-1] p[i-1] p[j+1] … p[n];
4.反转 p[j] 后面的数得到 p[1] … p[i-2] p[j] p[n] … p[j+1] p[i-1] p[j-1] … p[i]。

例如:设有排列(p)=2763541,按照字典式排序,它的下一个排列是什么?

  1. 2763541 (找最后一个正序35);
  2. 2763541 (找3后面比3大的最后一个数4);
  3. 2764531 (交换3,4的位置);
  4. 2764135 (把4后面的5,3,1反转)。

Python反转List的三种方法

现有a = [1,2,3,4,5],现需要进行对a进行反转

方法1:list(reversed(a))             

reversed(a)返回的是迭代器,所以前面加个list转换为list

方法2:sorted(a,reverse=True)

方法3:a[: :-1]            

其中[::-1]代表从后向前取值,每次步进值为1

 

注意:

对整个List进行反转操作时,用List[:]而不是List本身(一个指针),这样调用List才能操作所有元素。