python next permutation_返回全排列的前一个及stl::prev_permutation

今天被问到一个全排列的前一个问题,没有说明白,这里自己总结一下。问题:给定一个有序数组,每个数字唯一,再任意个一个数组数字的排列,返回这个排列的上一个。例如:给定有序数组[1,2,3]可能的排列有:[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2][3,2,1]给排列[2,1,3],返回[1,3,2]解题思路是通过排列组合的规则获取给定排列的位置,通过排列规则-1获取上一个位置...
摘要由CSDN通过智能技术生成

今天被问到一个全排列的前一个问题,没有说明白,这里自己总结一下。

问题:给定一个有序数组,每个数字唯一,再任意个一个数组数字的排列,返回这个排列的上一个。

例如:给定有序数组[1,2,3]

可能的排列有:

[1,2,3]

[1,3,2]

[2,1,3]

[2,3,1]

[3,1,2]

[3,2,1]

给排列[2,1,3],返回[1,3,2]

解题思路是通过排列组合的规则获取给定排列的位置,通过排列规则-1获取上一个位置,在通过规则获取结果。

分析过程为:可以把这种排列组合理解为改变进制的数字,例如上面arr[1,2,3]组成的数组,可以理解为进制为[2,1,0]的数组,即数组位置arr[0]所在位置++或者--, 总的改变量为2,arr[1]所在位置++或者--改变量为1,arr[2]所在位置自身无法改变,之前的内容决定了这里是什么。

不太容易解释,先写一下不考虑性能的代码理解解题思路,后面再分析精简后的代码。

理解思路的代码

include

#include

#include

#include

#include

usin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值