Every day a leetcode
题目来源:784. 字母大小写全排列
解法1:模拟
遍历一次s,找出其中的字母(如果s[i]>‘9’,则一定是字母),将已经创建的空间依次复制,并将每个对应的字母修改。
代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** letterCasePermutation(char * s, int* returnSize){
int len=strlen(s);
int ansSize=1;
char** ans=malloc(pow(2,len)*sizeof(char*));
*ans=(char*)calloc(len+1,sizeof(char));
strcpy(*ans,s);
for(int i=0;i<len;i++)
{
// 若s[i]是字母
if(s[i]>'9')
{
int k=ansSize;
for(int j=0;j<k;j++)
{
ans[k+j]=(char*)calloc(len+1,sizeof(char));
strcpy(ans[k+j],ans[j]);
//判断s[i]的大小写
if(s[i]>='a' && s[i]<='z') ans[k+j][i]=s[i]-32;
else if((s[i]>='A' && s[i]<='Z')) ans[k+j][i]=s[i]+32;
ansSize++;
}
}
}
*returnSize=ansSize;
return ans;
}
结果:

本文介绍了解决LeetCode上784题“字母大小写全排列”的一种方法——模拟法。该方法通过遍历字符串并复制已创建的空间,将每个字母转换为大写或小写来生成所有可能的排列。
286

被折叠的 条评论
为什么被折叠?



