funcletterCasePermutation(S string)[]string{var ret []stringvar c stringvar n intfor_, i :=range S {
n, c =len(ret),string(i)// 数字if i <='9'{if n ==0{
ret =append(ret, c)}else{// 每个元素都追加这个数字for j :=0; j < n; j++{
ret[j]= ret[j]+ c
}}}else{// 字母if n ==0{
ret =append(ret, strings.ToLower(c), strings.ToUpper(c))}else{// 元素都复制一份,一半追加大写一半追加小写for j :=0; j <2*n; j++{if j < n {
ret =append(ret, ret[j])
ret[j]= ret[j]+ strings.ToLower(c)}else{
ret[j]= ret[j]+ strings.ToUpper(c)}}}}}return ret
}
递归解法
type Ret struct{
data []string}funcletterCasePermutation(S string)[]string{
r :=&Ret{}
r.dfs(S)return r.data
}func(this *Ret)dfs(s string){// 终止条件if s ==""{return}// 处理本层
i := s[0]
n, c :=len(this.data),string(i)// 数字if i <='9'{if n ==0{
this.data =append(this.data, c)}else{// 每个元素都追加这个数字for j :=0; j < n; j++{
this.data[j]= this.data[j]+ c
}}}else{// 字母if n ==0{
this.data =append(this.data, strings.ToLower(c), strings.ToUpper(c))}else{// 元素都复制一份,一半追加大写一半追加小写for j :=0; j <2*n; j++{if j < n {
this.data =append(this.data, this.data[j])
this.data[j]= this.data[j]+ strings.ToLower(c)}else{
this.data[j]= this.data[j]+ strings.ToUpper(c)}}}}// 处理下一层
this.dfs(s[1:])}
leetcode 784. 字母大小写全排列循环解法func letterCasePermutation(S string) []string { var ret []string var c string var n int for _, i := range S { n, c = len(ret), string(i) // 数字 if i <= '9' { ...