189. 轮转数组
nums和nums[:]python数组两元素互换其值a=[None] * n创建列表异或^:
189. 轮转数组本文主要利用leetcode上的189. 轮转数组来解剖其涉及到的a=[None] * n,nums[:]等相关知识。
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]
题解:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
arr = [None]*len(nums)
for i in range(len(nums)):
arr[(i+k) % len(nums)] = nums[i]
nums[:] = arr
#方法2:
# n = len(nums)
# k = k % n
# nums[:] = nums[n - k:] + nums[:n - k]
#方法3:
# n = len(nums)
# k %= n
# nums.reverse()
# nums[:k] = list(reversed(nums[:k]))
# nums[k:] = list(reversed(nums[k:]))
# 方法4:
# for i in range(k):
# nums.insert(0,nums[-1])
# del nums[-1]
nums和nums[:]
nums = A: 更改nums这一变量名所指的对象,让nums变量指向A所指向的对象。nums[:] = A: 对nums指向的对象赋值,把A变量指向的对象的值逐个复制到nums指向的对象中并覆盖nums指向的对象的原来值。nums[:] 等价于 nums[0:len(nums)] 相当于取nums对应对象的一个视图,通过用这个来改变原对象的某几位值。
如:A[:2] = [0, 1],改变了A所指向的list对象的前两个值。
A = [0 ,1],让A这一变量名指向新的List对象[0,1]
此处参考加深理解:参考文章
python数组两元素互换其值
nums = [1,2,3,4,5,6,7] nums[0], nums[4] = nums[4], nums[0] print(nums)#[5, 2, 3, 4, 1, 6, 7]a=[None] * n创建列表
如果用a = [] 创建数组的话用到a[1]时会报错:IndexError: list assignment index out of range,所以会用到a=[None] * n,n为要创建的数组长度
grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]] m, n = len(grid), len(grid[0])#m行n列 a=[False] * n print(a)#[False, False, False, False] vis = [[False] * n for _ in range(2)] print(vis)#[[False, False, False, False], [False, False, False, False]]异或^:
如果是一个偶数^1,那么答案是该偶数+1.如果是一个奇数^1,那么答案是该奇数-1


![python轮转数组及nums和nums[:]的区别 python轮转数组及nums和nums[:]的区别](http://www.mshxw.com/aiimages/31/740779.png)
