Rotate List,Permutation Sequence,Next Permutation

Rotate List

循环移位链表,处理一下循环次数之后,拆分链表再合并即可,简单的链表操作


Permutation Sequence

用数学方法可以计算出第几位应该是几

例子:n = 4, k = 18

用一个数组记录阶乘数(全排列数):1,2,6 (n-1位即可)

k -= 1,变成 k = 17

从后面开始遍历更新数组:

第三位:17 / 6 = 2,k = 17 % 6 = 5

第二位:5 / 2 = 2, k = 5 % 2 = 1

第一位:1 / 1 = 1, k = 1 % 1 = 0

数组变为:1,2,2(这里记录的意义自行考虑)

再从后面遍历构造排列:

临时字符串 str = "1234"

构造过程:

遍历第三位:ans += str[ array[3] ] ,即 ans += str[2],此时 ans = "3",同时在str里删除该字符,变为 str = "124"

遍历第二位:ans += str[ array[2] ] ,即 ans += str[2],此时 ans = "34",同时在str里删除该字符,变为 str = "12"

遍历第一位:ans += str[ array[1] ] ,即 ans += str[1],此时 ans = "342",同时在str里删除该字符,变为 str = "1"

最后 ans += str,即为 ans = "3421"

ans 即为答案


Next Permutation

用数学方法分析下一个排列与上一个排列的关系即可

提示:从后往前遍历,寻找递增递减关系,并调整位置即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值