力扣2025.10.19每日一题
用了斐蜀定理
那么看到形如左半边的式子,则可按照这个方向思考。
在本题的运用是,确定能到第一个位置的元素位置,和确定num通过加法操作,能到的最小值。
同时注意对奇数和偶数位置的轮换,也就是说奇数的轮换操作有两个开头,偶数的轮换操作只有一个开头。
学习的灵神代码
代码如下:
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) 是奇数,轮转一次后,原来的偶数下标变成奇数下标。可以先轮转一次,执行累加,再轮转到我们想要的位置。可以视作我们拥有了「对偶数下标执行累加操作」的能力。
作者:灵茶山艾府
链接:https://leetcode.cn/problems/lexicographically-smallest-string-after-applying-operations/solutions/3797297/mei-ju-lun-zhuan-dao-zui-zuo-bian-de-xia-wuu3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。