博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Permutations
阅读量:6263 次
发布时间:2019-06-22

本文共 1503 字,大约阅读时间需要 5 分钟。

Given a collection of distinct numbers, return all possible permutations.For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].

这是一个全排列的问题。

关于全排列,网上有很多解法。

其中一个解法,我觉得比较简单,于是就用这个解法来试下。

【例】 如何得到346987521的下一个    1,从尾部往前找第一个P(i-1) < P(i)的位置            3 4 6 <- 9 <- 8 <- 7 <- 5 <- 2 <- 1        最终找到6是第一个变小的数字,记录下6的位置i-1    2,从i位置往后找到最后一个大于6的数            3 4 6 -> 9 -> 8 -> 7 5 2 1        最终找到7的位置,记录位置为m    3,交换位置i-1和m的值            3 4 7 9 8 6 5 2 1    4,倒序i位置后的所有数据            3 4 7 1 2 5 6 8 9    则347125689为346987521的下一个排列

 

代码如下:

def permute(self,nums):        nums.sort()        length = len(nums)        if length == 1:            return [nums]        start = 0        startValue = 0        last = 0        count = reduce(lambda x,y:x*y,range(1,length+1))        res = []        print( count)        while count:            res.append(copy.copy(nums))            for i in range(length-1,0,-1):                if nums[i] > nums[i-1]:                    start = i                    startValue = nums[i-1]                    break            for i in range(i,length):                if nums[i] > startValue:                    last = i            #swap            temp = nums[start-1]            nums[start-1] = nums[last]            nums[last] = temp            tl = nums[start:length]            nums = nums[0:start]            tl.reverse()            nums+=tl            count -=1        return res

 

转载于:https://www.cnblogs.com/seyjs/p/5333210.html

你可能感兴趣的文章
策略模式原来这么简单!
查看>>
js中 split slice splice 的区分
查看>>
阿里云运维总结
查看>>
js实用方法记录-js动态加载css、js脚本文件
查看>>
微信小程序入门: 导航栏样式、tabBar导航栏
查看>>
Runtime整理(二)——Runtime包含的所有函数
查看>>
nodejs request模块用法
查看>>
使用webpack从0搭建多入口网站脚手架,可复用导航栏/底部通栏/侧边栏,根据页面文件自动更改配置,支持ES6/Less...
查看>>
消息未读之点不完的小红点(Node+Websocket)
查看>>
JavaScript 之 DOM [ Node对象 ]
查看>>
使用vscode写typescript(node.js环境)起手式
查看>>
飞天技术汇大视频专场:全民视频时代下的创新技术之路
查看>>
以太坊分片详解
查看>>
Redis安装以及PHP开启Redis扩展
查看>>
JAVA IO BIO NIO AIO
查看>>
使用iview的组件 Table 表格,有固定列,设置其中一个列适应屏幕大小
查看>>
Vue学习笔记1
查看>>
用户输入一个网址到页面展示内容的这段时间内,浏览器和服务器都发生了生么事情?...
查看>>
动手搞一个Promise
查看>>
[case32]alibaba限流组件Sentinel实战
查看>>