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