首页 > 代码库 > Permutation Sequence
Permutation Sequence
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.
这道题直接在上一题的基础上修改了一下。上一题找出next permutation。只要循环找出k次就可以了,next permutation时间复杂度有点高,还需要优化一下
1 public class Solution { 2 3 public String getPermutation(int n, int k) { 4 int num[] = new int[n]; 5 for(int i = 1; i <= num.length; i++){ 6 num[i - 1] = i; 7 }//初始化数组 8 for(int i = 1; i < k; i++){ 9 nextPermutation(num);10 }//for11 String result = "";12 for(int i = 0; i < num.length; i++){13 result += String.valueOf(num[i]);14 }15 16 return result;17 }18 19 /**20 * 获取下一个排列21 * @param num22 */23 private void nextPermutation(int[] num) {24 if(num.length == 0 || num.length == 1)25 return;26 boolean found = false;27 int index = 0;28 int comparaValue = http://www.mamicode.com/0;29 for(int i = num.length - 1; i > 0; i--){ //找出出现降序的位置30 if(num[i] > num[i - 1]){ //这里不能交换31 index = i;32 comparaValue = http://www.mamicode.com/i - 1;33 break;34 }//if35 }//for36 37 int min = index;38 for(int i = min; i < num.length; i++){39 if(num[i] > num[comparaValue] && num[i] < num[min]){40 min = i;41 }//if 42 }//for43 int temp = num[min];44 num[min] = num[comparaValue];45 num[comparaValue] = temp;46 47 //对index后面的进行升序排列48 for(int i = index; i < num.length; i++){49 min = i;50 for(int j = i + 1; j < num.length; j++){51 if(num[min] > num[j])52 min = j;53 }//for54 if(min != i){55 temp = num[min];56 num[min] = num[i];57 num[i] = temp;58 }59 }60 61 }62 }
Permutation Sequence
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。