文档开发者中心
我的

OJ 46. 全排列

解题思路:
本题要求字典顺序的全排列,我们如果简化题目的意思,其实就是将从左往右1234…依次递增的顺序,经过一系列的排列之后,转换成…4321依次递减的顺序
然后我们开始观察:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
1.所有的变化都是从尾巴开始的,那么说明我们的算法需要从尾部往前去刷新
2.鉴于我们的简化题意,其实我们每次寻找的都是如果对应位置不是递减顺序,我们就把它改成递减顺序
3.如果我们单单只是swap我们寻找到的递减顺序的话,比如 1 2 3 4 —> 1 2 4 3 貌似很正确,但是如果我们量化我们的样本,会发现完全不一样,我们可以看1 2 4 3 —> 1 3 2 4 而不是 1 4 2 3,那么我们少了什么?
4.仔细回忆我们人脑写全排序的时候的过程我们可以发现,一旦发现递减顺序,其实我们是从尾部开始向前寻找第一个大于当前位置数字的数,然后交换他们,即1 2 4 3 —> 1 3 4 2,但是这还不是答案,因为我们还在脑子里做了一个翻转,从替换位往后做一个reverse,就是我们的答案即1 2 4 3 —> 1 3 4 2 —> 1 3 2 4

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

点赞
收藏
回复
分享
举报
浏览652 发布于2019-11-06 09:58未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。