next_permutation算法【STL源码】

知识点

获取下一个字典排列数

知识内容

next_permutation功能是获取下一个排列数。这里澄清一点,给定一个序列,手动列出所有的排列和计算机列出所有的排列不一样。wiki给出的算法看得有点晕,大致意思是每次生成的下一个可以保证不重复。这个算法是有数学加持的。

从代码结构学到的,错误,异常都是一个循环先处理掉。

先后指针用i,ii,天然看出先后关系。

对于复杂的循环处理结构,可以不考虑控制条件和终止条件,做成一个死循环,内部用if判断做循环体,再设计一个if判断做终止条件也不错。

思想一定,算法实现就可以直观呈现算法原貌。怎么直观怎么来。

这里有几个模式,数组上双指针带条件循环找位置(for结构,只保留循环体),数组上单指针找大值(while结构,空循环体)

代码结构

template <class _BidirectionalIter, class _Compare>
bool __next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                        _Compare __comp) {
  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
  if (__first == __last)  //先处理掉异常
    return false;
  _BidirectionalIter __i = __first;
  ++__i;
  if (__i == __last)   /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值