力扣hot100矩阵总结

发布于:2025-02-11 ⋅ 阅读:(89) ⋅ 点赞:(0)

目录

lc-73.矩阵置零-(时隔14天)-12.27

lc-48.旋转图像-(时隔23天)-01.02

48.第一次 12.10

​48.第二次 01.02

​lc-54.螺旋矩阵-(时隔16天)-12.27

54.第一次 12.09

54.第二次 12.27


lc-73.矩阵置零-(时隔14天)-12.27

思路:(23min22s)

        1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据要求设0即可;
        2.根据特点:在同一行的话只要有一个0,那么这行所有元素都要设为0,如果有一个以上的0的话,相当于重复给这一行设0了,那么可以考虑将行首位置去存储该行是否需要置0,同理,列首位置存储该列是否需要设置为0.
        3.最后根据遍历行首和列首去将相对应的行和列置0。

易错点:

        1.行首和列首均用于存储了其行或列是否需要置0,但是行首和列首本身是否有零就会被忽略,所以开始前先遍历行列首,用变量存储行列首是否需要置零。
        2.注意先开始遍历行首时,应该从第二行开始,不然当matrix[0,0]=0会影响后面列首的判断。

总结:

        原地算法可以考虑找特殊位置去存储信息,可以将行首和列首与其里面的小矩阵划分开处理,外部行列首进行存储,内部先进行遍历,最后考虑外部变化情况,此前,由于先实现内部置零,外部置零情况会被污染,所以可以先用变量存储外部是否需要置零,最后需要考虑matrix[0][0]这个特殊位置。

lc-48.旋转图像-(时隔23天)-01.02

  

/*1.两个for循环均对半,则只有近四分之一的数被循环
* 2.swap函数不影响外部,值传递
* 3.已经交换过的值避免再次进入for循环被交换复原
* 4.已经确定好为n*n矩阵
* */

//主对角线对称,注意避免重复,
// 所以不可直接for循环从第一行顺序从左向右逐层遍历一半的数,
// 而应该遍历上三角形

48.第一次 12.10

48.第二次 01.02

易错问题:

1.注意主对角线对称是i1=j2,i2=j1;

2.判断条件

lc-54.螺旋矩阵-(时隔16天)-12.27

 8d645f35361d4e079011a0fbf76f2e5e.png7b57fce051e2436e923b750a0268738c.png

54.第一次 12.09


 /*
error:1.if(t==b) return arr;特殊情况一行一列则将不会走完,以及行列数的不同导致if判断失效

2.注意行列下标不要搞混

3.注意上下边界初始化的值,交在一条线的时候大小关系变化作为判定条件

error:4.if(t==b&&l==r)走完所有元素将还会打印

*/

8502530efb284507b2d8c873d7386050.png

59b14f72129049b5b59db5875a96d189.png

7048619dbf79413fbac5335cde85bf0c.png

总结:

2.注意行列下标不要搞混

3.注意上下边界初始化的值,交在一条线的时候大小关系变化作为判定条件

4.可记结论,不要陷入深度思考

54.第二次 12.27

1.可以以b=length-1,这样会减少后续边界吃错的概率,更容易排查问题

2.直接以k神这个模版写,以及注意判断条件谁大于谁,以及i应该为变量t,b,l,r,还有坐标勿混,容易犯错,需要思考清楚


网站公告

今日签到

点亮在社区的每一天
去签到