【20190407】【每天一道算法题】字母大小全排列(递归)

问题:

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

示例:

输入: S = "a1b2"

输出: ["a1b2", "a1B2", "A1b2", "A1B2"]

输入: S = "3z4"

输出: ["3z4", "3Z4"]

输入: S = "12345"

输出: ["12345"]

注意:

S 的长度不超过12

S 仅由数字和字母组成。


思路与解答:(仍未解决!)

/* 获取一个字符,实现大小写的相互转换 
 * 知识点:1. 小写字母ASCII码比大写字母ASCII码大32;
 *         2. 返回的二维字符型数组,sReturn[m][n],其中m是原数组长度(strlen获得),n是2^x,x是原数组中的字母个数;
 *         3. 查找字母个数可以用ASCII码的范围(大写65~90,小写97~122)
 *         4. returnSize是指向int型变量的指针,因此要先malloc分配一段空间,或者定义一个变量,在变量之前加取地址符号让这个指针指向该变量(目的是指向一段空间);
 *         5. malloc分配的空间需要手动free,否则会造成内存泄漏(内存越用越少);
 *         6. 函数内部的变量是局部变量,在函数执行结束该段内存会自行释放,因此如果要把函数内部的变量传递到main函数,要定义全局变量,或者malloc分配动态空间;
 *         7. char函数类型,返回二维数组sReturn的数组名(即向main函数传递的是地址)
 *         8. 二维数组相当于一个二级指针(二级指针知识点学习一下)
 */
#include
#include
#include

char** letterCasePermutation(char* S, int* returnSize);

int main(void)
{
	char S[5] = {"a1b1"};
	char **result;
	int tmp = 0;
	
	for(int i = 0; i < m; i++)
	{
		if((S[i] >= 65 && S[i] <= 90) || (S[i] >= 97 && S[i] <=122))
			tmp++;
	}
	result = letterCasePermutation(S, &tmp);
	system("pause");
	return 0;
}

char** letterCasePermutation(char* S, int* returnSize) 
{
	int m = strlen(S);
	char sReturn[m][returnSize] = 
    return sReturn[0][0];  //
}

 

你可能感兴趣的:(LeetCode)