### 283. Move Zeroes

#### Problem

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

• You must do this in-place without making a copy of the array.
• Minimize the total number of operations.

#### Solution 1

Like Selection Sort, swap the first zero and the first non-zero number.

class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
if len(nums) <= 1:
return
i, j = 0, 1
while j < len(nums):
if nums[i] == 0 and nums[j] != 0:
nums[i], nums[j] = nums[j], nums[i]
i += 1
elif nums[i] != 0:
i += 1
j += 1

class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
l = len(nums)
k = 0
for num in nums:
if num!=0:
nums[k] = num
k += 1
else:
continue
nums[k:l]=[0]*(l-k)


#### Solution 2

Backward pop and append.

class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
n,i=len(nums),n-1
while i>=0:
if nums[i]==0:
nums.pop(i)
nums.append(0)
i-=1