【每天一道算法題】給定參數n,從1到n會有n個整數1,2,3,...,n這n個數組共有n!種排列,按照大小順序升序排列出所有列的情況,並一一標記,給定n和k返回第k個值

import java.util.*;
/**
 * 給定參數n,從1到n會有n個整數1,2,3,...,n這n個數組共有n!種排列,按照大小順序升序排列出所有列的情況,並一一標記,
 *給定n和k返回第k個值,
*/
public class Main {

        public static void cal(char data[], int k, List<String> list) {
            if (k == data.length) {
                String s = "";
                for (int i = 0; i < data.length; i++) {
                    s += data[i]+"";
                }
                list.add(s);
            }
            for (int i = k; i < data.length; i++) {
                {
                    char temp = data[k];
                    data[k] = data[i];
                    data[i] = temp;
                }
                cal(data, k + 1,list);
                {
                    char temp = data[k];
                    data[k] = data[i];
                    data[i] = temp;
                }
            }
        }

        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int s = scan.nextInt();
            int k = scan.nextInt();
            int [] a  = new int[s];
            char [] af  = new char[s];
            for (int i=0; i<s;i++) {
              a[i] = i+1;
            }
            String num="";
            for( int i = 0; i < a.length; i++ ){
                num += a[i]+"";
            }
            af = num.toCharArray();
            List<String> list = new ArrayList<>();
            cal(af, 0,list);
            System.out.println(list.get(k-1));
        }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章