60. Permutation Sequence

来源:互联网 发布:cookie登录 php 编辑:程序博客网 时间:2024/06/05 20:12

给定1~n  计算1~n 的n!个排列  求第k个排列是多少


第k个排列的第一个数字是index=(k-1)/(n-1)!   因为第一个数字确定以后 有(n-1)!种后续排列,去掉确定好的第一个数字,剩下的n-1个数字排列的第一个应该是 (n-1)!中的第k-index*(n-1)!个


public class Solution {      private int calFactorial(int n){          int ans=1;          for(int i=1;i<=n;i++){              ans*=i;          }                    return ans;      }            public String getPermutation(int n, int k) {          StringBuilder ans=new StringBuilder("");          int num=k;          StringBuilder s=new StringBuilder("");          int factorial=calFactorial(n);                    for(int i=1;i<=n;i++){              s.append(i);          }                    for(int i=n;i>=1;i--){              factorial/=i;              int index=(num-1)/factorial;                            String tmp=""+s.charAt(index);              ans.append(tmp);              // num=num%factorial;            num-=index*factorial;              s=s.deleteCharAt(index);          }                    return ans.toString();      }    }  


0 0
原创粉丝点击