原题如下
https://leetcode-cn.com/problems/letter-case-permutation/
题解
方法一
官解上面叫做递归,我也是参照官解写出来的的。
具体思路为,建立一个StringBuilder类型的动态数组,当然里面有一个空的builder最开始。从左到右遍历字符串,遇到数字就把list里面的全接上这个数字,遇到字母的时候,首先把list里的元素都复制一遍,复制完后,前半部分接上小写字母,后半部分接上大写字母。最后把list转化为string类型的。
代码示例java:
/*递归法,,参考官解方法一
*作者@v7fgg
*执行用时 :10 ms, 在所有 Java 提交中击败了41.07%的用户
*内存消耗 :40.7 MB, 在所有 Java 提交中击败了8.33%的用户
*2020年6月9日 14:10
*/
class Solution {
public List<String> letterCasePermutation(String S) {
List<StringBuilder> ansT=new ArrayList<>();
ansT.add(new StringBuilder());
for(int i=0;i<S.length();i++){
int l=ansT.size();
char c=S.charAt(i);
if(Character.isLetter(c)){
for(int j=0;j<l;j++){
ansT.add(new StringBuilder(ansT.get(j)));
ansT.get(j).append(Character.toLowerCase(c));
ansT.get(j+l).append(Character.toUpperCase(c));
}
}
else{
for(int j=0;j<l;j++){
ansT.get(j).append(c);
}
}
}
List<String> ans=new ArrayList<>();
for(StringBuilder s:ansT){
ans.add(s.toString());
}return ans;
}
}
方法二 掩码
方法三 字典
以上方法来源:https://leetcode-cn.com/problems/letter-case-permutation/solution/zi-mu-da-xiao-xie-quan-pai-lie-by-leetcode/