LeetCode 73. Set Matrix Zeroes
2016-02-05 17:17
447 查看
按照题目肯定是需要分配空间来标示某行某列是否需要全设为0。
1.最简单的方法,空间是O(m+n):分配m+n个bool空间,第一次遍历矩阵,若matrix[i][j] == 0,则把第i行和第j列设为true,在第二次遍历矩阵时,查询第i行第j列是否都是true,然后再决定matrix[i][j]是否设为0。
2.空间是O(1),只需要2个bool值bRow和bCol:用来指示第0行和第0列上是否有0,这种方法把0行0列和剩下的(m-1)*(n-1)矩阵区分开来,0行0列用来标示第i行第j列是否是0,和第一种类似,若为0,则matrix[0][j]和matrix[i][0]设为0。在第二次遍历时,查询matrix[0][j]和matrix[i][0]来对matrix[i][j]操作,注意:要把0行0列去掉,防止影响(m-1)*(n-1)矩阵,毕竟0行0列已经改变数值了,同时,遍历要从m-1和n-1而不是1行1列开始,因为矩阵可能没有1行1列。最后再对0行0列进行操作。
代码如下:
1.最简单的方法,空间是O(m+n):分配m+n个bool空间,第一次遍历矩阵,若matrix[i][j] == 0,则把第i行和第j列设为true,在第二次遍历矩阵时,查询第i行第j列是否都是true,然后再决定matrix[i][j]是否设为0。
2.空间是O(1),只需要2个bool值bRow和bCol:用来指示第0行和第0列上是否有0,这种方法把0行0列和剩下的(m-1)*(n-1)矩阵区分开来,0行0列用来标示第i行第j列是否是0,和第一种类似,若为0,则matrix[0][j]和matrix[i][0]设为0。在第二次遍历时,查询matrix[0][j]和matrix[i][0]来对matrix[i][j]操作,注意:要把0行0列去掉,防止影响(m-1)*(n-1)矩阵,毕竟0行0列已经改变数值了,同时,遍历要从m-1和n-1而不是1行1列开始,因为矩阵可能没有1行1列。最后再对0行0列进行操作。
代码如下:
<span style="font-size:24px;">class Solution { public: void setZeroes(vector<vector<int>>& matrix) { bool bRow = false; bool bCol = false; int m = matrix.size(); int n = matrix[0].size(); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (0 == matrix[i][j]) { if (0 == i && !bRow) { bRow = true; } else if (0 == j && !bCol) { bCol = true; } else if (0 != i && 0 != j) { matrix[0][j] = 0; matrix[i][0] = 0; } } } } for (int i = m-1; i >= 0; --i) { for (int j = n-1; j >= 0; --j) { if (0 == matrix[0][j] || 0 == matrix[i][0]) { matrix[i][j] = 0; 4000 } } } if (bRow) { for (int j = 0; j < n; ++j) { matrix[0][j] = 0; } } if (bCol) { for (int i = 0; i < m; ++i) { matrix[i][0] = 0; } } } };</span>
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解