LeetCode矩阵题型
以三角形遍历矩阵
for (int i = ; i < matrix.size(); ++i) {
for (int j = i + ; j < matrix[i].size(); ++j)
swap(matrix[i][j], matrix[j][i]);
}
48. Rotate Image https://leetcode.com/problems/rotate-image/description/
54. Spiral Matrix https://leetcode.com/problems/spiral-matrix/description/
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
if (matrix.size() == ) return result;
int rightend = matrix[].size() - ;
int buttomend = matrix.size() - ;
int leftend = ;
int topend = ;
int x = ;
int y = ;
while (true) {
for (; x <= rightend; x++)
result.push_back(matrix[y][x]);
topend++;
x--;
if (++y > buttomend)
break;
for (; y <= buttomend; y++)
result.push_back(matrix[y][x]);
rightend--;
y--;
if (--x<leftend)
break;
for (; x >= leftend; x--)
result.push_back(matrix[y][x]);
buttomend--;
x++;
if (--y<topend)
break;
for (; y >= topend; y--)
result.push_back(matrix[y][x]);
leftend++;
y++;
if (++x>rightend)
break;
}
return result;
}
1、代码中的循环使用xy,左边方式和数组寻址的位置正好相反
2、在每次循环之后,x或y的值都会偏移到end之后,所以需要更正
3、循环之后还要调整坐标,让下一个方向的遍历不会加入重复元素
59. Spiral Matrix II https://leetcode.com/problems/spiral-matrix-ii/description/
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n, vector<int>(n));
if (n == ) return result;
int rightend = n - ;
int buttomend = n - ;
int leftend = ;
int topend = ;
int x = ;
int y = ;
int current = ;
while (true) {
for (; x <= rightend; x++)
result[y][x] = current++;
x--;
topend++;
if (++y>buttomend)
break;
for (; y <= buttomend; y++)
result[y][x] = current++;
y--;
rightend--;
if (--x<leftend)
break;
for (; x >= leftend; x--)
result[y][x] = current++;
x++;
buttomend--;
if (--y<topend)
break;
for (; y >= topend; y--)
result[y][x] = current++;
y++;
leftend++;
if (++x>rightend)
break;
}
return result;
}
1、按照上一题反过来就可以了
73. Set Matrix Zeroes https://leetcode.com/problems/set-matrix-zeroes/description/
void setZeroes(vector<vector<int>>& matrix) {
vector<int> rows;
vector<int> clos;
for(int i=;i<matrix.size();i++){
for(int j=;j<matrix[].size();j++){
if(matrix[i][j] == ){
rows.push_back(i);
clos.push_back(j);
}
}
}
for(int i=;i<rows.size();i++){
for(int j=;j<matrix[rows[i]].size();j++){
matrix[rows[i]][j] = ;
}
}
for(int i=;i<clos.size();i++){
for(int j=;j<matrix.size();j++){
matrix[j][clos[i]] = ;
}
}
}
1、考虑使用第一行和第一列来记录上面所说的行和列的置0情况,这里问题是那么第一行和第一列自己怎么办?想要记录它们自己是否要置0,只需要两个变量(一个是第一行,一个是第一列)就可以了。然后就是第一行和第一列,如果要置0,就把它的值赋成0(反正它最终也该是0,无论第一行或者第一列有没有0),否则保留原值。然后根据第一行和第一列的记录对其他元素进行置0。最后再根据前面的两个标记来确定是不是要把第一行和第一列置0就可以了。这样的做法只需要两个额外变量,所以空间复杂度是O(1)
48
54
59
73
LeetCode矩阵题型的更多相关文章
- leetcode矩阵与动态规划相关
目录 54/59螺旋矩阵 62不同路径 64最小路径和 120三角形最小路径和 695岛屿的最大面积 547朋友圈 718最长重复数组 221最大正方形 121/122/123/714/188买卖股票 ...
- leetcode 新题型----SQL,shell,system design
leetcode 主要是一个针对北美的coder人群找工作的代码练习网站,我在2015年初次接触这个网站的时候,总共只有200多道题目,是一个类似acm 的a题网站.这些年变化越来越大,主要是因为找工 ...
- LeetCode. 矩阵中的最长递增路径
题目要求: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例: 输入: nums = [ ...
- leetcode.矩阵.378有序矩阵中第K小的元素-Java
1. 具体题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, 5, ...
- leetcode.矩阵.73矩阵置零-Java
1. 具体题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: 输出:[ [ [1,1,1], [1,0,1], [ ...
- leetcode.矩阵.766托普里茨矩阵-Java
1. 具体题目 如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵.给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True. 示例 1: 输入: ma ...
- leetcode.矩阵.240搜索二维矩阵II-Java
1. 具体题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性:每行的元素从左到右升序排列:每列的元素从上到下升序排列. 示例: 现有矩阵 ...
- leetcode.矩阵.566重塑矩阵-Java
1. 具体题目 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数.重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充.如果具有给定参数的reshape操 ...
- Leetcode 矩阵置零
题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用 O(mn) 的额外空间,但这 ...
随机推荐
- 如何在ST官网下载STM32固件库
1.首先要注册一个ST账号,下载的时候需要. 2.找到工具与软件 3.进去之后选"产品列表" 4.在产品列表里选STM32微控制器软件,直接点下图标号2,不要点左边的加号 5.进去 ...
- appium----【已解决】【Mac】安装sudo npm install -g appium-doctor总是提示“Error: EACCES: permission denied........”
[mac电脑] 问题: (1)npm install -g appium-doctor (2)sudo npm install -g appium-doctor (3)cnpm install ...
- Postman----presets与环境变量的联合使用
一.环境 在开发不同阶段,可能存在不同的环境(对我碰到的就是服务器地址/api版本/header信息等不一样),比如 debug环境和release环境,每次切换环境测试的时候都得重新配置url信息, ...
- spring,springMVC中常用注解
一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version=" ...
- 使用Java实现二叉树的添加,删除,获取以及遍历
一段来自百度百科的对二叉树的解释: 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用 ...
- 用Python学分析 - 正态分布
正态分布(Normal Distribution) 1.正态分布是一种连续分布,其函数可以在实线上的任何地方取值. 2.正态分布由两个参数描述:分布的平均值μ和方差σ2 . 3.正态分布的取值可以从负 ...
- #Java学习之路——基础阶段二(第九篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- 链表底层实现Java的Map(上)
链表实现Map public class LinkListMap<K,V> implements Map<K,V> { private class Node { public ...
- 图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理
题图:by Charles Loyer 一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header) ...
- HTTP网络协议与手写Web服务容器
Http协议 1.深入概念 Http:HyperText Transfer Protocol,即是超文本传输协议. 2.浅出概念(使用浏览器访问服务器端网页时需要遵循的一系列规则) Http:将各种不 ...