以三角形遍历矩阵

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矩阵题型的更多相关文章

  1. leetcode矩阵与动态规划相关

    目录 54/59螺旋矩阵 62不同路径 64最小路径和 120三角形最小路径和 695岛屿的最大面积 547朋友圈 718最长重复数组 221最大正方形 121/122/123/714/188买卖股票 ...

  2. leetcode 新题型----SQL,shell,system design

    leetcode 主要是一个针对北美的coder人群找工作的代码练习网站,我在2015年初次接触这个网站的时候,总共只有200多道题目,是一个类似acm 的a题网站.这些年变化越来越大,主要是因为找工 ...

  3. LeetCode. 矩阵中的最长递增路径

    题目要求: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例: 输入: nums = [ ...

  4. leetcode.矩阵.378有序矩阵中第K小的元素-Java

    1. 具体题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1,  5, ...

  5. leetcode.矩阵.73矩阵置零-Java

    1. 具体题目 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: 输出:[ [  [1,1,1],  [1,0,1],  [ ...

  6. leetcode.矩阵.766托普里茨矩阵-Java

    1. 具体题目 如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵.给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True. 示例 1: 输入: ma ...

  7. leetcode.矩阵.240搜索二维矩阵II-Java

    1. 具体题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性:每行的元素从左到右升序排列:每列的元素从上到下升序排列. 示例: 现有矩阵 ...

  8. leetcode.矩阵.566重塑矩阵-Java

    1. 具体题目 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数.重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充.如果具有给定参数的reshape操 ...

  9. Leetcode 矩阵置零

    题目描述(中等难度) 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解决方案是使用  O(mn) 的额外空间,但这 ...

随机推荐

  1. Java基础-常用的String方法

    先从String的new的方式 说起 这是面试题里面经常出现的 算是老套路之一 就是 比较下列两个的变化 两种实例化的区别 第一种String name1 = "好人";Strin ...

  2. Mysql8.0命令

    1.创建用户 create user 'username'@'localhost' identified by 'pwd' 2.修改访问权限 在mysql数据下修改user表用户host为'%' up ...

  3. 《Thinking in Android 9.0 系统开发源码钻研录》

    最近打算把个人站点的博客文章同步到"博客园"! Thinking in Android -- "系统启动" [启动阶段] [相关文章] 状态 源码版本 init ...

  4. 原生JS封装 toast 弹层,自动关闭

    由于公司业务需求,要一个公共toast ,下面是自己封装的一个. css: .toast { text-align: center; min-height: 70px; width: 220px; c ...

  5. CAP带你轻松玩转Asp.Net Core消息队列

    CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前已经1656 Star),具有轻量级.易使用.高性能 ...

  6. 从零单排学Redis【黄金】

    前言 只有光头才能变强 好的,今天我们要上黄金段位了,如果还没经历过青铜和白银阶段的,可以先去蹭蹭经验再回来: 从零单排学Redis[青铜] 从零单排学Redis[白银] 看过相关Redis基础的同学 ...

  7. C# 错误:空对象不能转换为值类型

    最近在做项目的时候出现了一个错误 当从数据库中获取值的时候 报错:空对象不能转换为值类型 因为数据库你查询数据的时候不是所有的字段都是存在数据的,有些字段可能是Null值,也就是没有数据 当你在类型转 ...

  8. 使用Ninject的一般步骤

    以下为DI控制反转个人理解烦请各位大牛指教~ 编写程序时我们应当遵循抵耦合高内聚的原则(各个功能模块互不依赖). 我们可以利用面向对象里面接口的特性来进行DI控制反转,让功能模块全部依赖接口,而不依赖 ...

  9. vue-router中元信息meta的妙用

    { path:"/test", name:"test", component:()=>import("@/components/test&quo ...

  10. Dynamics CRM 配置 OAuth 2.0

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复124或者20140324可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 本博文主要参考但不限于如下资料: ...