@@ -18,11 +18,12 @@ static void dfs(int *nums, int size, bool *used, int *stack,
1818 col_size [* count ] = size ;
1919 (* count )++ ;
2020 } else {
21+ /* Reverse order is allowed in different levels, always starts from [0] */
2122 for (i = 0 ; i < size ; i ++ ) {
23+ /* Used marks only allows remaining elements in DFS levels */
2224 if (!used [i ]) {
23- if (i > 0 && nums [i ] == nums [i - 1 ] && !used [i - 1 ]) {
24- /* In case that duplicate permutation with same elemements */
25- /* Used marks allow same elements in different DFS levels */
25+ if (i > 0 && !used [i - 1 ] && nums [i - 1 ] == nums [i ]) {
26+ /* In case that duplicate permutation with same elemements but in different postions */
2627 continue ;
2728 }
2829 used [i ] = true;
@@ -46,8 +47,8 @@ static int **permute(int* nums, int numsSize, int* returnSize, int **returnColum
4647 int count = 0 , cap = 10000 ;
4748 int * stack = malloc (numsSize * sizeof (int ));
4849 int * * results = malloc (cap * sizeof (int * ));
49- bool * used = malloc (numsSize );
50- memset (used , false, numsSize );
50+ bool * used = malloc (numsSize * sizeof ( bool ) );
51+ memset (used , false, numsSize * sizeof ( bool ) );
5152 * returnSize = 0 ;
5253 * returnColumnSize = malloc (cap * sizeof (int ));
5354 dfs (nums , numsSize , used , stack , 0 , results , returnSize , * returnColumnSize );
0 commit comments