在Python中进行两次加倍,反转和交换后的模式
假设我们有一个数字n,我们从该序列中找到了第n个值。顺序如下-
xxy
xxyxxy
xx
y
xyyxyyxyyxyy
...
要生成下一个值,我们必须遵循以下规则,以xxy作为第一项-
当我们在模式的开头时,将其加倍(将字符串与其自身连接起来)。
当最后一个操作加倍时,将其反转。
当最后一个操作反转时,将所有xs与ys交换,反之亦然。
重复这些步骤。
因此,如果输入类似于n=5,则输出将为“yyxyyxyyxyyx”
为了解决这个问题,我们将遵循以下步骤-
i:=0
ret:=“xxy”
当我<n时
new_stringy:=空字符串
对于ret中的每个c,执行
ret:=new_stringy
new_stringy:=new_stringy连接“x”
new_stringy:=new_stringy连接“y”
如果c与“x”相同,则
除此以外,
ret:=ret从索引0到end-1的子数组
ret:=ret+ret
如果我的mod3等于0,那么
否则当我mod3与1相同时
除此以外,
我:=我+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