Permutation Sequence (Java)

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):

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

注意例子中的顺序,数小的在前。

n个值的排列有n!种,n - 1个值有(n - 1)!种,除去字符串首位,剩下的为n - 1位的排列,如123和132,除去1外就剩下两个数2,3,对其进行排列有23和32两种,即 (3-1)!种。 由此可得出第k个数的首位字符是多少,即 k / (n - 1)!, 比如 k = 5,那么可以得到第一位的index为2,即 数字3,接下来找第二位。 k = k % (n - 1)! 得出以3开头的里面排第几,然后用 k / (n - 2)! 来确定第二位的index,以此类推。 

Source

public class Solution {
    public String getPermutation(int n, int k) {
    	StringBuffer st = new StringBuffer();	//string 无append
    	if(n == 0) return st.toString();
    	int f = 1;
    	ArrayList<Integer> num = new ArrayList<Integer>();
    	
    	k = k - 1;   //下标从0开始 ***
    	
    	for(int i = 1; i <= n ;i ++){
    		num.add(i);
    	}
    	for(int i = 1; i < n; i++){		//(n-1)!
    		f = f * i;  
    	}
    	
    	int kx = k;
    	int count = n;
    	while(count > 0){
    		int index = kx / f;
    		st.append(num.get(index));
    		num.remove(index);    //***
    		
    		kx = kx % f;
    		if((count - 1) != 0) f = f / (count - 1);
    		count --;
    		
    	}
    	return st.toString();
        
    }
}


Test

    public static void main(String[] args){
    	System.out.println(new Solution().getPermutation(3, 5));
     	
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值