为什么我的数组旋转解法本地运行正确但Leetcode提交报错?
问题原因分析
- 核心问题:没有按照题目要求原地修改输入的nums数组
题目注释明确标注了rtype: None Do not return anything, modify nums in-place instead.,你当前的代码只是生成了新的拼接后的数组num2并打印,全程没有修改传入的nums变量本身的内容。LeetCode判题时只会读取输入的nums的最终值,不会读取打印内容,因此会判定结果错误。你本地测试时只看了打印的num2的结果,所以误以为逻辑正确,实际如果调用方法后打印原nums数组,会发现nums完全没有变化。 - 边界处理缺失:没有处理k大于数组长度的情况
当k的值大于等于数组长度时,len(nums)-k会得到负数,你写的两个for循环的range范围直接就会出错。实际上数组旋转k次等价于旋转k % len(nums)次,需要先对k做取模处理。
修正后的参考代码
class Solution(object): def rotate(self, nums, k): """ :type nums: List[int] :type k: int :rtype: None Do not return anything, modify nums in-place instead. """ n = len(nums) k = k % n # 处理k大于数组长度的边界情况 # 给nums全切片赋值,直接修改原数组内容,符合原地修改要求 nums[:] = nums[n - k:] + nums[:n - k]
内容的提问来源于stack exchange,提问作者serendipity0217
相关产品推荐
相关产品推荐

