• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

非递归输出1-N的全排列的方法详解

python 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

下面小编就为大家带来一篇非递归的输出1-N的全排列实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

网易游戏笔试题算法题之一,可以用C++,Java,Python,由于Python代码量较小,于是我选择Python语言。

算法总体思路是从1,2,3……N这个排列开始,一直计算下一个排列,直到输出N,N-1,……1为止

那么如何计算给定排列的下一个排列?

考虑[2,3,5,4,1]这个序列,从后往前寻找第一对递增的相邻数字,即3,5。那么3就是替换数,3所在的位置是替换点。

将3和替换点后面比3大的最小数交换,这里是4,得到[2,4,5,3,1]。然后再交换替换点后面的第一个数和最后一个数,即交换5,1。就得到下一个序列[2,4,1,3,5]

代码如下:

def arrange(pos_int):  #将1-N放入列表tempList中,已方便处理  tempList = [i+1 for i in range(pos_int)]  print(tempList)  while tempList != [pos_int-i for i in range(pos_int)]:    for i in range(pos_int-1,-1,-1):      if(tempList[i]>tempList[i-1]):        #考虑tempList[i-1]后面比它大的元素中最小的,交换。        minmax = min([k for k in tempList[i::] if k > tempList[i-1]])        #得到minmax在tempList中的位置 <i style="color:transparent">本文来源gaodai$ma#com搞$$代**码网$</i>       index = tempList.index(minmax)        #交换        temp = tempList[i-1]        tempList[i-1] = tempList[index]        tempList[index] = temp        #再交换tempList[i]和最后一个元素,得到tempList的下一个排列        temp = tempList[i]        tempList[i] = tempList[pos_int-1]        tempList[pos_int-1] = temp        print(tempList)        breakarrange(5)

以上就是非递归输出1-N的全排列的方法详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:非递归输出1-N的全排列的方法详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址