方法一:
遇到一个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;
}
};