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) 的额外空间,但这 ...
随机推荐
- linux文件的基本属性
Linux 文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规 ...
- python接口自动化(十二)--https请求(SSL)(详解)
简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...
- SpringBoot进阶教程(二十五)整合Redis之@Cacheable、@CachePut、@CacheEvict的应用
在上一篇文章(<SpringBoot(二十四)整合Redis>)中,已经实现了Spring Boot对Redis的整合,既然已经讲到Cache了,今天就介绍介绍缓存注解.各家互联网产品现在 ...
- 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制
背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...
- [PHP] debug_backtrace()可以获取到代码的调用路径追踪
查看代码的时候,看到有使用这个函数,测试一下 1.debug_backtrace()可以获取到代码的调用追踪,以数组形式返回 2.debug_print_backtrace() — 打印一条回溯,直接 ...
- 学习python的第二天
4.26自我总结 一.程序语言 1.机械语言 由于0和1组成 优点:执行效率快 缺点:操作麻烦繁琐 2.汇编语言 比机械语言好点 优点:比机械语言操作方便 缺点,执行慢 3.高级语言 主要两个,jav ...
- 自学WEB前端能不能找到一份前端开发工作
关于自学WEB前端能不能通过社招找到一份互联网公司WEB前端开发的工作,有无数的人问出这样的问题,答案没有标准的,只能从概率去考虑.有的人可以,有的人不可以,有的人自学就业的概率就是高,有的概率就是低 ...
- 解决 win10飞行模式 无限自动开关 无法关闭
驱动问题,名为“Insyde Airplane Mode HID Mini-Driver”的驱动,这个驱动是专门用来快捷管理飞行模式的. 卸载完成后重启,无限开关飞行模式问题得到解决!
- Windows提示 错误: RPC 服务器不可用 解决方法。
试验环境: 本地主机:win10 ip:192.168.0.10 远程主机: win2008 R2 ip:192.168.1.128 我想要通过systeminfo去获取远程主机的系统信息,但是 ...
- 通过命令行设置Windows 时区
我们在进行自动测试的时候,不同的测试程序对于时区的要求不同,所以在开始的时候需要根据测试程序的要求了设置时区. Windows 提供了一个工具来进行时区设置.tzutil.exe. 目录:C:\Win ...