字母大小寫全排列 無需打亂順序進行的回溯演算法

2021-10-05 20:47:02 字數 1255 閱讀 1895

leetcode:字母大小寫全排列

給定乙個字串s,通過將字串s中的每個字母轉變大小寫,我們可以獲得乙個新的字串。返回所有可能得到的字串集合。

示例:輸入: s = 「a1b2」

輸出: [「a1b2」, 「a1b2」, 「a1b2」, 「a1b2」]

輸入: s = 「3z4」

輸出: [「3z4」, 「3z4」]

輸入: s = 「12345」

輸出: [「12345」]

注意:

s 的長度不超過12。

s 僅由數字和字母組成。

一開始直接把回溯演算法的模板寫了出來,後來發現其實根本不需要多出乙個記錄選擇的陣列,因為這次的題目不需要打亂原先字串的排列順序,直接在原先的排列順序上進行選擇字母大小寫即可,所以處在選擇節點的時候,可以將選擇陣列看成是[「a」,「a」],故在實現回溯演算法的時候,for迴圈只需要執行兩次,重點是層數和陣列的第幾位要對應起來,檢視s[layer]是否是字母,若不是的話,直接執行下一層的回溯,執行完畢後break,防止重複執行,若是字母的話,再判斷這是第幾次迴圈,第一次迴圈取小寫字母(也可以取大寫,順序不同罷了),第二次迴圈取大寫字母,之後都執行回溯演算法,直到層數和字串長度相等。

以下是我的**:

# include

# include

using

namespace std;

class

solution

void

trackback

(vector

&result,string tempstring,string s,

int layer)

for(

int i=

0;i<

2;i++)if

(i==

0) tempstring[layer]

=(s[layer]

<

97?s[layer]+32

:s[layer]);

else

if(i==

1) tempstring[layer]

=(s[layer]

>=

97?s[layer]-32

:s[layer]);

trackback

(result,tempstring,s,layer+1)

;}}}

;

還有一點就是要知道a在ascii中對應的值為97,a對應的值為65,直到差值之後就好轉化了。

784 字母大小寫全排列

給定乙個字串s,通過將字串s中的每個字母轉變大小寫,我們可以獲得乙個新的字串。返回所有可能得到的字串集合。示例 輸入 s a1b2 輸出 a1b2 a1b2 a1b2 a1b2 輸入 s 3z4 輸出 3z4 3z4 輸入 s 12345 輸出 12345 注意 s 的長度不超過12。s 僅由數字和...

784 字母大小寫全排列

給定乙個字串s,通過將字串s中的每個字母轉變大小寫,我們可以獲得乙個新的字串。返回所有可能得到的字串集合。示例 輸入 s a1b2 輸出 a1b2 a1b2 a1b2 a1b2 輸入 s 3z4 輸出 3z4 3z4 輸入 s 12345 輸出 12345 注意 s 的長度不超過12。s 僅由數字和...

784 字母大小寫全排列

給定乙個字串s,通過將字串s中的每個字母轉變大小寫,我們可以獲得乙個新的字串。返回所有可能得到的字串集合。示例 輸入 s a1b2 輸出 a1b2 a1b2 a1b2 a1b2 輸入 s 3z4 輸出 3z4 3z4 輸入 s 12345 輸出 12345 class solution void d...