zoukankan      html  css  js  c++  java
  • leetcode排列,求第k个排列

    stl 中的下一个排列在写一遍忘了

    写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察,

    比如 list={1,2,3}

    分成3组:

    1  {2,3}

    2 {1,3}

    3 {1,2}

    确定位于哪个组,然后确定位于哪个组的第几个nyoj 511。

    求第3个排列   ,3%2=1,删除 list就是第3个数3,其实呢是第2个树2 ,所以   计算方法为 (k-1)/(n-1)!

    另外一个对于下一组,k%(n-1)!也不行啊,   第4个, 4%2!=0,其实应该为第二2.

    这个思路和nyoj的小球下落很像(nyoj 511)

     1 public class Solution {
     2     
     3     private String ans="";
     4     public int calu(int n)
     5     {
     6         if(n==0) return 1;
     7         int sum=1;
     8         for(int i=2;i<=n;i++)
     9         {
    10             sum*=i;
    11         }
    12         return sum;
    13     }
    14     
    15     public String getPermutation(int n, int k) {
    16         ArrayList<Integer> arry=new ArrayList<Integer>();
    17         for(int i=1;i<=n;i++)
    18         {
    19             arry.add(i);
    20         }
    21         
    22         get(k,calu(n-1),arry);
    23         return ans;
    24         
    25     }
    26     public void get(int k,int n1,ArrayList<Integer> list)
    27     {
    28         if(list.size()==1)
    29         {
    30             ans+=list.remove(0);
    31             return;
    32         }
    33            int a=list.remove((k-1)/n1);
    34            ans+=a;
    35            int te=k%n1;
    36            if(te==0) te=n1;
    37         get(te,n1/list.size(),list);
    38         
    39         
    40     }
    41 }
    View Code
  • 相关阅读:
    Delphi XE2 之 FireMonkey 入门(13)
    Delphi XE2 之 FireMonkey 入门(12)
    Delphi XE2 之 FireMonkey 入门(11)
    svn泄漏敏感信息利用方式
    提取windows用户明文密码
    firefox中outlook.com页面卡顿的原因
    漏洞的定义
    Hydra--密码破解的神器
    数据库设计那些事(数据库范式)
    数据库范式
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3840492.html
Copyright © 2011-2022 走看看