zoukankan      html  css  js  c++  java
  • leetcode 60 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和一个数字k,然后在由1-n的所有数字组成的排列组合中,输出第k个。规则如上(先改变后面的数字,就是比如四个数字,第一个是1234,第二个是1243)

    然后这道题想清楚思路也就比较简单了。

    总共有n个数字,那么以每个数字开头都有(n-1)!种,也就是说如果  1<=k<=(n-1)!  那么这个组合就会以1开头。

    确定了第一个数字之后,那么就以同样的方法确定之后的数字,在第一个数字确定的基础上,以某个数字都有(n-2)!种 ,所以就可以推断出:

      求第k个字符串的时候,从前到后依次确定数字;count指的就是当前数字中,以某个数字开头的组合的种类个数。

    public class Solution {
        public String getPermutation(int n, int k) {
            int[] flag = new int[n];
            String result ;
            char[] ans  = new char[n];
            int count = 1;
            for( int i = 2;i<n;i++)
                count*=i;
            for( int i = 0;i<n;i++){
                if ( k == 1){
                    for( int j = 0;j<n;j++){
                        if( flag[j] == 0){
                            ans[i] = (char) (j+49);
                            i++;
                            flag[j] = 1;
                        }
                    }
                    return new String(ans);
                }
                int num = (k-1)/count;
                k = k - num*count;
                count = count/(n-1-i);
                for( int j = 0;j<n;j++){
                    if( flag[j] == 0){
                        if( num == 0){
                            ans[i] = (char) (j+49);
                            flag[j] = 1;
                            break;
                        }else
                            num--;
                    }
                }
            }
            return new String(ans);
            
            
        }
    }

    这道题是难得的一次提交就到达最快的时候。

  • 相关阅读:
    C++中struct和class的区别
    关于LBP特征等价模式的解释
    常用的颜色模型
    flask类装饰器
    flask的方法视图
    flask standrad class 使用
    flask add_url_rule的使用
    模板的继承
    模板变量设置 set 和 with
    模版include的用法
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/5810624.html
Copyright © 2011-2022 走看看