字典序全排列

字典序法的描述如下:
设P是1~n的一个全排列: p=p1p2......pn=p1p2......pj1pjpj+1......pk1pkpk+1......pn

  1. 从排列的右端开始,找出第一个比右边字符小的字符的序号j(j从左端开始计算),即 j=max{i|pi<pi+1}
  2. 在pj的右边的字符中,找出所有比pj大的字符中最小的字符pk,即 k=max{i|pi>pj} (右边的字符从右至左是递增的,因此k是所有大于 pj 的字符中序号最大者)
  3. 对换 pj pk
  4. 再将 pj+1......pk1pkpk+1pn 倒转得到排列 p′′=p1p2.....pj1pjpn.....pk+1pkpk1.....pj+1 ,这就是排列p的下一个下一个排列。

例如839647521是数字1~9的一个排列。从它生成下一个排列的步骤如下:

  • 自右至左找出排列中第一个比右边数字小的数字4 839647521
  • 在该数字后的数字中找出比4大的数中最小的一个5 839647521
  • 将5与4交换 839657421
  • 将7421倒转 839651247
  • 所以839647521的下一个排列是839651247。
    839651247的下一个排列是839651274。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值