꽤 간단한 leetcode에 문제가 있습니다. 그러나 두 번째 해결책은 정확하지 않습니다. (OG 질문 : ) 배열 num이 주어지면, 모든 0을 끝으로 이동시키는 함수를 작성하면서 비제로 요소. 예목록에있는 ele [에 대한 python과 목록의 차이에 대한 ele?
주어진 nums의 = [0, 1, 0, 3, 12, 함수를 호출 한 후, nums [1, 3, 12, 0, 0].
되어야참고 : 어레이의 복사본을 만들지 않고 현재 위치에서 수행해야합니다. 총 작업 수를 최소화하십시오.
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
k = 0
for ele in nums[:]:
if ele == 0:
nums.remove(0)
k += 1
nums.extend([0]*k)
class Solution(object): -------Incorrect solution
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
k = 0
for ele in nums:
if ele == 0:
nums.remove(0)
k += 1
nums.extend([0]*k)
왜 다른 점이 있습니까?
첫 번째 해결 방법은 입력 복사본을 만들기 때문에 올바르지 않습니다. – user2357112
http://stackoverflow.com/questions/6022764/python-removing-list-element-while-iterating-over-list <- 여기를 참조하십시오. 올바른 솔루션에서는 목록의 _copy_를 반복하고, 잘못된 솔루션에서는 목록 자체를 반복합니다. – Will
내 대답을 확인하면 현재 반복되는 시퀀스에서 물건을 제거하는 것이 나쁜 이유를 확인할 수 있습니다. http://stackoverflow.com/a/31704332/1318181 – IanAuld