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
用数学方法分析下一个排列与上一个排列的关系即可
提示:从后往前遍历,寻找递增递减关系,并调整位置即可