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

  • 相关阅读:
    GridView简单应用
    利用Field获取图片
    css的三种书写方式
    css选择器概述
    关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
    easyUI按钮图表对照大全
    jquery绑定点击事件的三种写法
    css中关于table的相关设置
    Leetcode 287. 寻找重复数
    LeetCode 278. 第一个错误的版本
  • 原文地址:https://www.cnblogs.com/guoguolan/p/5672346.html
Copyright © 2011-2022 走看看