用了斐蜀定理
那么看到形如左半边的式子,则可按照这个方向思考。
在本题的运用是,确定能到第一个位置的元素位置,和确定num通过加法操作,能到的最小值。
同时注意对奇数和偶数位置的轮换,也就是说奇数的轮换操作有两个开头,偶数的轮换操作只有一个开头。
学习的灵神代码
代码如下:
python
class Solution:
def findLexSmallestString(self, s: str, a: int, b: int) -> str:
s = list(map(int,s))
n = len(s)
step = gcd(b,n)
g = gcd(a,10)
ans = [inf]
def modify(start):
ch = t[start]
inc = ch%g - ch
if inc:
for j in range(start,n,2):
t[j] = (t[j] +inc)%10
for i in range(0,n,step):
t = s[i:] +s[:i]
modify(1)
if step%2 :
modify(0)
ans = min(ans,t)
return ''.join(map(str,ans))
还有就是这个操作很值得注意!!!
如果 gcd(b,n) 是奇数,轮转一次后,原来的偶数下标变成奇数下标。可以先轮转一次,执行累加,再轮转到我们想要的位置。可以视作我们拥有了「对偶数下标执行累加操作」的能力。
作者:灵茶山艾府
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。