由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Non-recursive permutation
相关主题
一个容易记忆的permutation算法今天才整明白Permutation的最优解!?
Given a string, find all its permutations without any repetition?String permunation question (CS)
问一个题counting quickperm algorithm
问一个题目关于排列组合的题目的算法
用了递归以后,怎么计算空间复杂度?一道amazon题
Permutation leetcode-Exposed上一道string permutation的题
攒rp,发个L家面经这两道leetcode题有更好的答案吗?
关于permutation和combination问题:Find the minimum number of "swaps" needed to sort an array
相关话题的讨论汇总
话题: int话题: swap话题: controller话题: unsigned
进入JobHunting版参与讨论
1 (共1页)
p******o
发帖数: 125
1
请问有没有比较好的办法?我能想到的只能用stack,然后把需要的信息都存起来。但是
很麻烦,
代码写出来也不好看。
d****n
发帖数: 233
2
// test1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void PrintArray(int *A, unsigned int N)
{
for (unsigned int i = 0; i < N; i++)
{
printf("%d ", A[i]);
}
printf("\r\n");
}
// This method print out an array iteratively.
// The idea behind this is:
// 1. Suppose we have a way to print out permutation for A[n-1].
// 2. For every permutation, insert the nth element between any of
// the n-1 elements will construct a new permuation
// F

【在 p******o 的大作中提到】
: 请问有没有比较好的办法?我能想到的只能用stack,然后把需要的信息都存起来。但是
: 很麻烦,
: 代码写出来也不好看。

d****n
发帖数: 233
3
void IterativePrintPermutation2(int *A, unsigned int N)
{
int *controller = new int[N];
for (unsigned int i = 0; i < N; i++)
controller[i] = i;

while (1)
{
PrintArray(A, N);

int i = -1;
while (++i < N)
{
if (controller[i] == 0)
{
controller[i] = i;
Swap(A, i, 0);
}
else
{
Swap(A, i, controller[i]);
Swap(A,

【在 d****n 的大作中提到】
: // test1.cpp : Defines the entry point for the console application.
: //
: #include "stdafx.h"
: void PrintArray(int *A, unsigned int N)
: {
: for (unsigned int i = 0; i < N; i++)
: {
: printf("%d ", A[i]);
: }
: printf("\r\n");

r**u
发帖数: 1567
4
check next_permute function in STL

【在 p******o 的大作中提到】
: 请问有没有比较好的办法?我能想到的只能用stack,然后把需要的信息都存起来。但是
: 很麻烦,
: 代码写出来也不好看。

p******o
发帖数: 125
5
老大,我看了半小时,真没看懂。。。
能否加几句注释解释一下。
我去看看next_permutation。

【在 d****n 的大作中提到】
: void IterativePrintPermutation2(int *A, unsigned int N)
: {
: int *controller = new int[N];
: for (unsigned int i = 0; i < N; i++)
: controller[i] = i;
:
: while (1)
: {
: PrintArray(A, N);
:

d****n
发帖数: 233
6
First, not sure if this is the fatest one. I did it for fun a while ago.
Hope no interviewer will ask such kind of question.
Hints:
Think about # of permutations for n size array is 1*2*3*...*(n-1)*n.
if you have permutations for 1,2,3,...(n-1). what you need to do is to
switch one of the element with the nth and repeat the permutation for length
(n-1). all the elements after (n-1)th will be untouched.

【在 p******o 的大作中提到】
: 老大,我看了半小时,真没看懂。。。
: 能否加几句注释解释一下。
: 我去看看next_permutation。

r**u
发帖数: 1567
7
解释一下next_permute,其实就是按字符顺序输出,比如12345
先在的permutation是12345,下一个就是12354。
算法思路,怎么找下一个呢:
比如先在:13542,下一个是14235,
首先要从后往前找第一个pair,满足A[i] 被变大的。上面这例子里这pair是35, 542已经是最大的permutation了。
所以要找到3。如果找不到这中pair,那么已经是最大的permutation了,比如54321。
然后从后往前找一个比3大的数,swap(it, 3)。这例子里是swap(4, 3)。
这样的话permutation变大,但是不会变得太大, swap(5, 3)就不对了。
先在变成14532了,然后reserve 532,得到14235。

【在 p******o 的大作中提到】
: 老大,我看了半小时,真没看懂。。。
: 能否加几句注释解释一下。
: 我去看看next_permutation。

x****r
发帖数: 99
8
这个算法我见过,很精妙哈哈

【在 r**u 的大作中提到】
: 解释一下next_permute,其实就是按字符顺序输出,比如12345
: 先在的permutation是12345,下一个就是12354。
: 算法思路,怎么找下一个呢:
: 比如先在:13542,下一个是14235,
: 首先要从后往前找第一个pair,满足A[i]: 被变大的。上面这例子里这pair是35, 542已经是最大的permutation了。
: 所以要找到3。如果找不到这中pair,那么已经是最大的permutation了,比如54321。
: 然后从后往前找一个比3大的数,swap(it, 3)。这例子里是swap(4, 3)。
: 这样的话permutation变大,但是不会变得太大, swap(5, 3)就不对了。
: 先在变成14532了,然后reserve 532,得到14235。

p******o
发帖数: 125
9
这个很通俗易懂,而且还可以handle重复的。谢谢了。

【在 r**u 的大作中提到】
: 解释一下next_permute,其实就是按字符顺序输出,比如12345
: 先在的permutation是12345,下一个就是12354。
: 算法思路,怎么找下一个呢:
: 比如先在:13542,下一个是14235,
: 首先要从后往前找第一个pair,满足A[i]: 被变大的。上面这例子里这pair是35, 542已经是最大的permutation了。
: 所以要找到3。如果找不到这中pair,那么已经是最大的permutation了,比如54321。
: 然后从后往前找一个比3大的数,swap(it, 3)。这例子里是swap(4, 3)。
: 这样的话permutation变大,但是不会变得太大, swap(5, 3)就不对了。
: 先在变成14532了,然后reserve 532,得到14235。

p******o
发帖数: 125
10
谢谢老大。

length

【在 d****n 的大作中提到】
: First, not sure if this is the fatest one. I did it for fun a while ago.
: Hope no interviewer will ask such kind of question.
: Hints:
: Think about # of permutations for n size array is 1*2*3*...*(n-1)*n.
: if you have permutations for 1,2,3,...(n-1). what you need to do is to
: switch one of the element with the nth and repeat the permutation for length
: (n-1). all the elements after (n-1)th will be untouched.

1 (共1页)
进入JobHunting版参与讨论
相关主题
问题:Find the minimum number of "swaps" needed to sort an array用了递归以后,怎么计算空间复杂度?
问一道g电面题Permutation leetcode-
问道面试题攒rp,发个L家面经
MS Onsite关于permutation和combination
一个容易记忆的permutation算法今天才整明白Permutation的最优解!?
Given a string, find all its permutations without any repetition?String permunation question (CS)
问一个题counting quickperm algorithm
问一个题目关于排列组合的题目的算法
相关话题的讨论汇总
话题: int话题: swap话题: controller话题: unsigned