解题思路:

  1. 先把最简单的移动0位处理掉,移动0位直接返回原列表就行了
  2. 当移动位数超过列表长度的时候,需要取余,本题有n=6,m=7的情况,就以此为例:列表长度为6,移动7位则相当于移动一整轮多1位
    m = m % n --- m = 7 % 6 最后m的值为1
  3. 把整个列表翻转一下,比如: [1,2,3,4,5,6] --- [6,5,4,3,2,1]
  4. 我们希望的结果是: [5,6,1,2,3,4]
  5. 观察一下,移动位数n为2,那么最后的结果就是以n为分界线,左右两边首尾交换
  6. 定义一个专门处理首位交换的函数reverse,定义两个索引start和end,第一项和最后一项交换、第二项和倒数第二项交换,以此类推
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 旋转数组
# @param n int整型 数组长度
# @param m int整型 右移距离
# @param a int整型一维数组 给定数组
# @return int整型一维数组
#
class Solution:
    def solve(self , n: int, m: int, a: List[int]) -> List[int]:
        # write code here
        if n == 0:
            return a
        m = m % n
        res = a[::-1]
        self.reverse(res, 0, m-1)
        self.reverse(res, m, n-1)
        return res
    def reverse(self, res, start, end):
        while start < end:
            temp = res[start]
            res[start] = res[end]
            res[end] = temp
            start += 1
            end -= 1