Python 中的雙倍、反轉和交換模式
假設我們有一個數字 n,我們需要找到序列中的第 n 個值。序列如下所示:
- xxy
- xxyxxy
- yxxyxx
- xyyxyy
- xyyxyyxyyxyy
- ...
為了生成下一個值,我們必須遵循以下規則,從 xxy 作為第一項開始:
當我們在模式的開頭時,將其加倍(將字串與其自身連線)。
當上次操作是加倍時,將其反轉。
當上次操作是反轉時,將所有 x 與 y 交換,反之亦然。
重複這些步驟。
因此,如果輸入為 n = 5,則輸出將為“yyxyyxyyxyyx”
為了解決這個問題,我們將遵循以下步驟:
- i := 0
- ret := "xxy"
- 當 i < n 時,執行以下操作:
- 如果 i mod 3 等於 0,則
- ret := ret + ret
- 否則,如果 i mod 3 等於 1,則
- ret := ret 的子陣列(從索引 0 到末尾)
- 否則,
- new_stringy := 空字串
- 對於 ret 中的每個字元 c,執行以下操作:
- 如果 c 等於 "x",則
- new_stringy := new_stringy 連線 "y"
- 否則,
- 否則
- 如果 c 等於 "x",則
- new_stringy := new_stringy 連線 "x"
- ret := new_stringy
- 如果 i mod 3 等於 0,則
- i := i + 1
返回 ret
讓我們看看下面的實現,以便更好地理解:
class Solution: def solve(self, s): i = 0 ret = "xxy" while i < s: if i % 3 == 0: ret += ret elif i % 3 == 1: ret = ret[::-1] else: new_stringy = "" for c in ret: if c == "x": new_stringy += "y" else: new_stringy += "x" ret = new_stringy i += 1 return ret ob = Solution() print(ob.solve(5))
即時演示
5
輸入
yyxyyxyyxyyx
列印頁面
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP