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;
}
结果: