1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// @Title: 移动零 (Move Zeroes)
// @Author: 15816537946@163.com
// @Date: 2019-10-08 23:40:57
// @Runtime: 88 ms
// @Memory: 7.6 MB
/*
 * @lc app=leetcode.cn id=283 lang=golang
 *
 * [283] 移动零
 *
 * https://leetcode-cn.com/problems/move-zeroes/description/
 *
 * algorithms
 * Easy (56.02%)
 * Likes:    376
 * Dislikes: 0
 * Total Accepted:    61.9K
 * Total Submissions: 110.3K
 * Testcase Example:  '[0,1,0,3,12]'
 *
 * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
 * 
 * 示例:
 * 
 * 输入: [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 
 * 说明:
 * 
 * 
 * 必须在原数组上操作,不能拷贝额外的数组。
 * 尽量减少操作次数。
 * 
 * 
 */


func moveZeroes(nums []int) {
	if len(nums) == 0 {
		return
	}
	ret := make([]int, 0)
	var cnt int

	for _, v := range nums {
		if v == 0 {
			cnt++
		} else {
			ret = append(ret, v)
		}
	}

	// 添加0
	for cnt > 0 {
		ret = append(ret, 0)
		cnt--
	}

	// 拷贝ret数组到原数组
	for i := range ret {
		nums[i] = ret[i]
	}

}