方法一:

遇到一个0,就删掉,并在列表末尾追加一个0

python实现

class Solution:
    def moveZeroes(self , nums: List[int]) -> List[int]:
        # write code here
        i=0
        while i<len(nums):
          # 终止条件,如果后面的全是0,就不用往后走了
            if len(set(nums[i:])) == 1 and nums[i] == 0:
                return nums
            if nums[i] != 0:  # 不等于0才需要i+1,否则还是在原位置
                i+=1
                continue
            else:
                del nums[i]
                nums.append(0)
        return nums

方法二:

  • 创建一个新列表
  • 循环原列表
    • 遇到非零数,添加到新列表中
    • 遇到0, 记录0的数量
  • 最后将所有0追加到新列表中

python实现

class Solution:
    def moveZeroes(self , nums: List[int]) -> List[int]:
        # write code here
        zero_num = 0
        new_list = []
        for i in range(len(nums)):
            if nums[i] != 0:  # 当前数非0,加入新列表
                new_list.append(nums[i])
            else:             # 当前数为0,0的计数器加一
                zero_num += 1
        # 将zero_num个0组成列表,拼接到new_list后面即可
        new_list.extend([0 for i in range(zero_num)])
        return new_list

c++实现

class Solution {
public:
    vector<int> moveZeroes(vector<int>& nums) {
        // write code here
        int zero_num=0;
        vector<int> new_list;
        for(int i=0; i<nums.size(); i++){
            if(nums[i] != 0){
                new_list.emplace_back(nums[i]);
            }else{
                zero_num++;
            }
        }
        for(int i=0; i<zero_num; i++){
            new_list.emplace_back(0);
        }
        return new_list;
    }
};