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 }

leetcode排列,求第k个排列

时间: 2024-10-21 23:42:09

leetcode排列,求第k个排列的相关文章

60. Permutation Sequence(求全排列的第k个排列)

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): "123" "132" "213" "231" "312" "3

LeetCode 笔记21 生成第k个排列

题目是这样的: 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): "123" "132" "213" "231" "312"

ligh1060(求字符串第k大排列)组合数学

题意:求给定字符串(有重复字符)第k大排列. 解法:先判断字符串的所有排列是否够k个.然后从左向右每一位每一位确定.简单的组合数学. 代码: /**************************************************** * author:xiefubao *******************************************************/ #pragma comment(linker, "/STACK:102400000,10240000

[leetcode] 60. 第k个排列

60. 第k个排列 还是使用之前用过多次的nextPermutation方法...(几乎所有跟排列相关的题都是同一个题- -) class Solution { public String getPermutation(int n, int k) { int[] nums = new int[n]; for (int i = 1; i <= n; i++) { nums[i - 1] = i; } while (k > 1) { nextPermutation(nums); k--; } St

第k个排列

给定 n 和 k,求123..n组成的排列中的第 k 个排列. 注意事项 1 ≤ n ≤ 9 样例 对于 n = 3, 所有的排列如下: 123 132 213 231 312 321 如果 k = 4, 第4个排列为,231. 1 public class PaiLieK 2 { 3 public String getPermutation(int n, int k) 4 { 5 List<Integer> list = new ArrayList<>(); 6 List<

UVA - 12335 Lexicographic Order (第k大排列)

Description A Lexicographic Order Input: Standard Input Output: Standard Output The alphabet of a certain alien language consists of n distinct symbols. The symbols are like the letters of English alphabet but their ordering is different. You want to

输入一个字符串,求字符的所有排列

#include <iostream> #include <cstring> #include <string> using namespace std; void ComStr(char *str, string &s,int m) { if (m == 0) { cout<<s<<endl; return ; } if (*str != '\0') { s.push_back(*str); ComStr(str+1,s ,m-1);

[Swift]LeetCode60. 第k个排列 | Permutation Sequence

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 for n = 3: "123" "132" "213" "231" "312" "321&

HDU 5249 离线树状数组求第k大+离散化

KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1160    Accepted Submission(s): 488 Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度.数十亿的请求被推到一个大管道后同时服务从管头拉取请求.让我们来定义每个请求都有一个重要值.我的