在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