zoukankan      html  css  js  c++  java
  • 60. Permutation Sequence java solutions

    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.

     1 public class Solution {
     2     public String getPermutation(int n, int k) {
     3         StringBuilder ans = new StringBuilder();
     4         StringBuilder tmp = new StringBuilder();
     5         for(int i = 1; i<=n; i++) tmp.append(i);
     6         int factor = calculate(n);
     7         int index = 0;
     8         for(int i = n; i>=1; i--){
     9             factor /= i;
    10             index = (k-1)/factor;
    11             ans.append(tmp.charAt(index));
    12             k -= index*factor;
    13             tmp.deleteCharAt(index);
    14         }
    15         return ans.toString();
    16     }
    17     
    18     public int calculate(int n){
    19         int sum = 1;
    20         for(;n>=1; n--){
    21             sum *= n;
    22         }
    23         return sum;
    24     }
    25 }

    n个数的permutation总共有n阶乘个,基于这个性质我们可以得到某一位对应的数字是哪一个。思路是这样的,比如当前长度是n,我们知道每个相同的起始元素对应(n-1)!个permutation,

    也就是(n-1)!个permutation后会换一个起始元素。因此,只要当前的k进行(n-1)!取余,得到的数字就是当前剩余数组的index,如此就可以得到对应的元素。

    https://discuss.leetcode.com/topic/17348/explain-like-i-m-five-java-solution-in-o-n

  • 相关阅读:
    ajax_基础1
    省市数据库脚本TblArea.
    c#中怎么使用dos命
    Lambda表达式
    面试收录
    .Net牛逼程序猿要懂得
    Web.config 配置文件
    sql 查询所有数据库、表名、表字段总结
    Json在net与页面之间的传递
    『转』SAP统驭科目解释
  • 原文地址:https://www.cnblogs.com/guoguolan/p/5672346.html
Copyright © 2011-2022 走看看