permutation-sequence

参考博客1
参考博客2
直接看这个吧
题目链接

思路1

  1. 对1—n这个数组进行全排序
  2. 计数当出现第k个组合的时候记录
  3. 应该超时,但是试一下把 9!肯定超过1s了。

思路2

根据参考博客【直接看这个吧】的链接,其实道理很简单

  1. 对于第一位a1来说共有(n-1)! 种组合,然后第一位共有n中情况那么总共是n!这样来说,用k/(n-1)!就可以知道第一位选择n个数中的哪一个
  2. 选完第一个之后 k要更新,k = k%(n-1)! 再去确定第二位
  3. 其实相当于将第一位除去之后的同样问题 那么就是新的数组中的k/(n-2)!
//思路一的代码 超时
import java.util.ArrayList;

public class Solution {
    public static  int minK=0;

    public  String getPermutation(int n, int k) {
        StringBuffer buffer = new StringBuffer();
        for(int i=1;i<=n;i++){
            buffer.append(i+"");
        }
        ArrayList<String> result =new ArrayList<String>();
        prem(buffer,n,0,k,result);
        if(result.size()>0){
            return result.get(0);
        }
       return "";     
    }

    public static void prem(StringBuffer str,int n,int index,int K,ArrayList<String> result){
        if(index==n){
            if(minK ==K){
                result.add(str.toString());
            }

            return;
        }
        for(int i = index;i<n;i++){
            swap(str,index,i);
            if(index==n-1){
                minK++;
            }
            prem(str,n,index+1,K, result);
            swap(str,index,i);
        }

    }
    public static void swap(StringBuffer str,int i,int j){
        char temp = str.charAt(i);
        str.setCharAt(i, str.charAt(j));
        str.setCharAt(j, temp);
    }

}
//思路二
public class Solution {
    public String getPermutation(int n, int k) {
        if(k<=0 || n<0){
             return "";
         }
         //求n的阶乘
         int factorial  =1;
         StringBuffer buffer = new StringBuffer();//用来存储1--n
         StringBuffer result = new StringBuffer();
         for(int i=1;i<=n;i++){
             factorial *=i;
             buffer.append(i+"");
         }
         k--;
         for(int i=0;i<n;i++){//对于每一位
             factorial = factorial/(n-i);
             int index = k/factorial;
             result.append(buffer.charAt(index));
             //移除这个index
             buffer.deleteCharAt(index);
             k = k%factorial;
         }
        return result.toString();    
    }
}

你可能感兴趣的:(permutation-sequence)