ここでのオリジナルタイトルリンク:https://leetcode.com/problems/letter-case-permutation/
トピック:
文字列Sを考えると、我々は別の文字列を作成するには、小文字または大文字のように個別にすべての文字を変換することができます。私たちが作ることができるすべての可能な文字列のリストを返します。
例: 入力:S = "A1B2" 出力:[ "A1B2"、 "A1B2"、 "A1B2"、 "A1B2"] 入力:S = "3z4" 出力:[ "3z4"、 "3Z4"] 入力:S = "12345" 出力:[ "12345"]
注意:
S
間の長さの文字列になります1
と12
。S
唯一の文字または数字で構成されます。
ソリューション:
各DFSレベルについて、状態が現在のインデックスと現在のアイテムを必要とします。
インデックスが最後にヒットすると、RESに追加します。
時間計算:O(指数)。
スペース:O(S.lengt())。
ACのJava:
1 クラスソリューション{ 2 パブリックリストの<string> letterCasePermutation(文字列S){ 3 リストの<string> RES = 新規のArrayList <> (); 4 caseDfs(S、0、新規のStringBuilder()、RES)。 5 リターンのres; 6 } 7 8 プライベート ボイド caseDfs(文字列s、int型の CUR、StringBuilderのSB、リストの<string> RES){ 9 であれば(CUR == s.length()){ 10 res.add(sb.toString())。 11 リターン; 12 } 13 14 チャー C = s.charAt(CUR)。 15 であれば(Character.isDigit(C)){ 16 sb.append(C); 17 caseDfs(S、CUR + 1 、SB、RES)。 18 sb.deleteCharAt(sb.length() - 1 )。 19 } 他{ 20 sb.append(Character.toLowerCase(c)参照)。 21 caseDfs(S、CUR + 1 、SB、RES)。 22 sb.deleteCharAt(sb.length() - 1 )。 23 24 sb.append(Character.toUpperCase(c)参照)。 25 caseDfs(S、CUR + 1 、SB、RES)。 26 sb.deleteCharAt(sb.length() - 1 )。 27 } 28 } 29 }
同様の組み合わせ。