我观察到不同的行为
nums.reverse() and nums = nums[::-1]
class Solution(object):
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
i=len(nums)-2
while(i>-1 and nums[i]>=nums[i+1]):
i-=1
continue
if i==-1:
# nums.reverse()
nums = nums[::-1]
print(nums)
return
j=len(nums)-1
while(j>i and nums[i]>nums[j]):
j-=1
nums[i],nums[j] =nums[j], nums[i]
我看到两者的打印都是正确的,但在 nums = nums[::-1] 的情况下,执行代码块后最终的就地值不会反转。我认为使用任何一个都应该有效
当你这样做时:
nums = nums[::-1]
您正在创建一个新的列表对象,然后将 nums 变量重新分配给这个新列表。这意味着传递给函数的原始列表保持不变。
此外:
nums.reverse()
您正在原始列表对象上调用reverse()方法,这会就地修改它。传递给函数的原始列表被直接修改。
为了进一步澄清,请考虑以下示例:
def modify_list_1(lst):
lst.reverse()
def modify_list_2(lst):
lst = lst[::-1]
a = [1, 2, 3]
modify_list_1(a)
print(a) # Outputs: [3, 2, 1]
b = [1, 2, 3]
modify_list_2(b)
print(b) # Outputs: [1, 2, 3]