LEETCODE60——第K个排列

 1 class Solution {
 2 public:
 3     string getPermutation(int n, int k) {
 4         string ans(n, ‘0‘);
 5         vector<bool> flag(n, false);
 6         int count = 1;
 7         for (int i = 1; i < n; i++)
 8             count *= i;
 9         int m;
10         int m_f;
11         int index = 0;
12         k = k - 1;
13         while (index <n-1)
14         {
15             m = k / count;
16             m_f = 0;
17             for (int i = 0; i <= m; i++, m_f++)
18             {
19                 while (flag[m_f])
20                     m_f++;
21             }
22             m_f--;
23             flag[m_f] = true;
24             ans[index] = m_f + 1+ ‘0‘;
25             index++;
26             k = k % count;
27             count = count / (n - index );
28         }
29         int i = 0;
30         while (flag[i])
31             i++;
32         ans[n - 1] = i + 1 + ‘0‘;
33         return ans;
34
35
36     }
37 };

总结:几乎是用找规律算出来的,再次写,未必能流畅写下来。

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

原文地址:https://www.cnblogs.com/ayaoyao/p/9837535.html

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

LEETCODE60——第K个排列的相关文章

[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&

第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<

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"

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)!也不行

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

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

2015美团网 哈工大 第k个排列

leetcode 上的Permutation Sequence 下面是可执行代码 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 以1 开头 123,132,共2!个数 2 开头  213,231 3开头  312, 321 如果给你弟k个,能求出它位于以谁开头不?只要求出它位于第几个2!个,总体思路就是这个 2 3 import java.util.ArrayList; 4 5 public class Main { 6 //求N的阶乘 7 public static

第k个排列数

变长编码,这里排列的序号是0到n!-1,假设求 1,2,3,4 的第15个排列数,15/(3!) = 2, 余数是3,第一个数是(1,2,3,4)中的第二个数 3 (这里0是开始位置),3/(2!) = 1, 余数是1,第二个数就是(1,2,4)中的第一个数 2,  1/(1!) = 1, 余数是0,第三个数(1,4)中的第1个数就是4, 最后一个数就是1.结果就是3,2,4,1 #include <cstdio>#include <cstring>#include <vec