看了好久還是不懂 為啥 abc 的結果會是
cba bca bac cab acb abc
而不是
abc
bac
bca
acb
cab
acb
這樣從a開始插入進去
看了好久還是不懂 為啥 abc 的結果會是
cba bca bac cab acb abc
而不是
abc
bac
bca
acb
cab
acb
這樣從a開始插入進去
1.插入a
結果: a
2.插入b
結果: ba ab
3.插入c
結果: cba bca bac cab acb abc
如題目所述:
給你一個字元(英文字元)的集合,遵照以上的規則,你就可以產生所有的排列方式。給你的字元集合中所有的字元都不一樣,並且不會超過10個。產生的程序是遞迴的,你必須從第1個字元開始,並且按照順序的插入其他的字元。Sample Input和Sample Output會清楚的表達這一點。對Sample Input你的輸出應該完全和Sample Output一樣。
因此不是從 a 插入進其他字元(主動),是從 a 開始插入其他字元(被動)。
以 abc 為例,藍色字為一排列:
一開始是 a
接著插入 b 在左邊,變 ba
再插入 c 在左邊,變 cba
退回到 ba
插入 c 於 b 、 a 之間,變 bca
回到 ba
插入 c 於尾端,變 bac
回到 ba
回到 a
插入 b 至 a 的左側,變 ab
再插入 c 在左邊,變 cab
退回到 ab
插入 c 於 b 、 a 之間,變 acb
回到 ab
插入 c 於尾端,變 abc
回到 ab
回到 a
遞迴結束。
因此輸出順序確實是
cba
bca
bac
cab
acb
abc
這樣子沒錯。
如題目所述:
給你一個字元(英文字元)的集合,遵照以上的規則,你就可以產生所有的排列方式。給你的字元集合中所有的字元都不一樣,並且不會超過10個。產生的程序是遞迴的,你必須從第1個字元開始,並且按照順序的插入其他的字元。Sample Input和Sample Output會清楚的表達這一點。對Sample Input你的輸出應該完全和Sample Output一樣。
因此不是從 a 插入進其他字元(主動),是從 a 開始插入其他字元(被動)。
以 abc 為例,藍色字為一排列:
一開始是 a
接著插入 b 在左邊,變 ba
再插入 c 在左邊,變 cba
退回到 ba
插入 c 於 b 、 a 之間,變 bca
回到 ba
插入 c 於尾端,變 bac
回到 ba
回到 a
插入 b 至 a 的左側,變 ab
再插入 c 在左邊,變 cab
退回到 ab
插入 c 於 b 、 a 之間,變 acb
回到 ab
插入 c 於尾端,變 abc
回到 ab
回到 a
遞迴結束。
因此輸出順序確實是
cba
bca
bac
cab
acb
abc
這樣子沒錯。
哦哦,瞭解。
想成要從第一個字元開始 插入其他的字元,感謝樓主的說明。
中文真的是有點奧妙,同樣一句話,有多種解讀的方式。