leetcode 60

在这里插入图片描述

package no51_100;

public class subject060 {
	class Solution {
	    public String getPermutation(int n, int k) {
	    	boolean[] used = new boolean[n];
	        StringBuffer result = new StringBuffer();
	        while(n!=0) {
	        	int f = fac(n-1);
	        	int min_n= (int)Math.ceil(k*1.0/f);
	        	if(min_n==0) {//这个地方很关键,写代码的时候是试出来的,解释性不充分
	        		min_n = n;
	        	}
	        	int temp = getMin_n(min_n, used);
	        	result.append( temp );
	        	n--;
	        	k = k % f;
	        }
	    	return result.toString();
	    }
	    
	    //算阶乘
	    private int fac(int n) {
	    	int res = 1;
	    	for(int i=1; i<=n; i++) {
	    		res *= i;
	    	}
	    	return res;
	    }
	    
	    //获取没有用到的数中第n小的数
	    private int getMin_n(int min_n, boolean[] used) {
	    	int count = 0;
	    	int result = 0;
	    	for(int i=1; i<=used.length; i++) {
	    		if( !used[i-1] ) {
	    			count++;
	    		}
	    		if(count==min_n) {
	    			used[i-1] = true;
	    			result = i ;
	    			break;
	    		}
	    	}
	    	return result;
	    }
	}

	public static void main(String[] args) {
		subject060 subject = new subject060();
		Solution s = subject.new Solution();
		
		//int n = 4, k = 9;
		//int n=3, k=2;
		int n=1, k=1;
		
		String result = s.getPermutation(n, k);
		System.out.println(result);
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东心十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值