题解 | #字符串的排列#

字符串的排列

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return string字符串一维数组
 * @return int* returnSize 返回数组行数
 */

void swap(char* a, char* b) {
    char tmp = *a;
    *a = *b;
    *b = tmp;
}

void permute(char* str, int start, int end, char** result, int* returnSize) {
    if(start == end) {
        result[*returnSize] = (char*)malloc((end + 1) * sizeof(char));
        strcpy(result[*returnSize], str);
        (*returnSize)++;
    } else {
        int shouldSwap = 1;
        for(int i = start; i <= end; i++) {
            shouldSwap = 1;
            for(int j = start; j < i; j++) {
                if(str[j] == str[i]) {
                    shouldSwap = 0;
                    break;
                }
            }
            if(shouldSwap) {
                swap(&str[start], &str[i]);
                permute(str, start + 1, end, result, returnSize);
                swap(&str[start], &str[i]);
            }
        }
    }
}


char** Permutation(char* str, int* returnSize ) {
    // write code here
    int len = strlen(str);
    if(str == NULL || len == 0) {
        *returnSize = 0;
        return NULL;
    }

    int totalPermutations = 1;
    for(int i = 1; i <= len; i++) {
        totalPermutations *= i;
    }

    char** result = (char**)malloc(totalPermutations * sizeof(char*));
    *returnSize = 0;
    permute(str, 0, len - 1, result, returnSize);
    return result;
}

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
牛客大王八:考公吧,你这个考公适合
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务