permutations with recursion code example
Example 1: generate all permutations of string
void perm(char a[], int level){
static int flag[10] = {0};
static char res[10];
// If we are the last character of the input string
if(a[level] == '\0'){
// First we assign stopping point to result
res[level] = '\0';
// Now we print everything
for(int i = 0; res[i] != '\0'; ++i){
printf("%c", res[i]);
}
printf("\n");
++counter;
}
else{
// Scan the original string and flag to see what letters are available
for(int i = 0; a[i] != '\0'; ++i){
if(flag[i] == 0){
res[level] = a[i];
flag[i] = 1;
perm(a, level + 1);
flag[i] = 0;
}
}
}
}
int main(){
char first[] = "abc";
perm(first, 0);
return 0;
}
Example 2: recursive permutation
function findPerms(str) {
if (str.length === 1) return [str]
let all = []
for (let i = 0; i < str.length; i++) {
const currentLetter = str[i]
const remainingLetters = str.slice(0,i) + str.slice(i+1)
const permsOfRemainingLetters = findPerms(remainingLetters)
permsOfRemainingLetters.forEach(
subPerm => {all.push(currentLetter + subPerm)}
)
}
return all
}