The set [1,2,3,…,n]
contains a total of n!
unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
思路,使用字典序法,与http://blog.csdn.net/mlweixiao/article/details/38897499
public class Solution { private void nextPermutation(int[] num) { int i; int cur = -1; int temp; // find the last increase sequence for (i = num.length - 1; i >= 1; i--) { if (num[i] > num[i - 1]) { cur = i - 1; break; } } // if the increase sequence exists, // swap the cur and the last one(bigger than it) if (cur != -1) { for (i = num.length - 1; i > cur; i--) { if (num[i] > num[cur]) { temp = num[cur]; num[cur] = num[i]; num[i] = temp; break; } } } for (i = cur + 1; 2 * i <= cur + num.length - 1; i++) { temp = num[i]; num[i] = num[num.length - i + cur]; num[num.length - i + cur] = temp; } } public String getPermutation(int n, int k) { int [] temp=new int[n]; StringBuffer s=new StringBuffer(""); for(int i=0;i<n;i++){ temp[i]=i+1; } for(int i=1;i<k;i++){ nextPermutation(temp); } for(int i=0;i<n;i++){ s.append(temp[i]); } return s.toString(); } }
时间: 2024-12-26 09:00:26