当前位置: 首页 > wzjs >正文

发帖百度秒收录网站分享公司网站网页

发帖百度秒收录网站分享,公司网站网页,可以免费秒玩游戏的网站,网站建设设计收费54. 螺旋矩阵 - 力扣(LeetCode) 先放自己写了好久的模拟代码,自己都被 i 和 j 搞晕了T_T最后还要特判,如果行和列的最小值为奇数,特殊处理一下最中心的数字。更详细的解释放在下面官方题解的代码上。这里对应的是官方…

54. 螺旋矩阵 - 力扣(LeetCode)

先放自己写了好久的模拟代码,自己都被 i 和 j 搞晕了T_T最后还要特判,如果行和列的最小值为奇数,特殊处理一下最中心的数字。更详细的解释放在下面官方题解的代码上。这里对应的是官方题解的方法二“按层遍历”。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<>();int m = matrix.length, n = matrix[0].length;int turn = Math.min(m, n) / 2;for(int i = 0; i < turn; i++) { //需要转圈的次数for(int j = i; j < n - i; j++) { //遍历上res.add(matrix[i][j]);}for(int j = i + 1; j < m - i; j++) { //遍历右res.add(matrix[j][n-1-i]);}for(int j = n - 2 -i; j >= i; j--) { //遍历下res.add(matrix[m-1-i][j]);}for(int j = m - 2 - i; j > i; j--) { //遍历左res.add(matrix[j][i]);}}if(turn * 2 != m && turn * 2 != n) {if(m > n) {for(int i = turn; i < m - turn; i++){res.add(matrix[i][n/2]);}} else {for(int i = turn; i < n - turn; i++){res.add(matrix[m/2][i]);}}}return res;}
}

看完自己的一大堆,再看官方的长代码都觉得眉清目秀了呢【bushi】其实两份代码思路是一样的,将矩阵看成若干层,先输出最外面一圈,接着继续输出第二圈,直到遍历结束。

依据题意,对于每层,从左上方开始顺时针遍历所有元素。当前层的左上角的坐标设为 (top, left),右下角坐标设为 (bottom, right)。角落处的数字在哪一侧遍历都可以,只要保证不会重复遍历即可(这里我跟官方题解稍微有一点出入)。

  • 遍历上侧,(top, left) 到 (top, right)
  • 遍历右侧,(top + 1, right) 到 (bottom, right)
  • 遍历下侧,(bottom, right - 1) 到 (bottom, left)
  • 遍历左侧,(bottom - 1, left ) 到 (top + 1, left)

遍历完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续遍历,直到遍历完所有元素为止。需要额外注意最中心的那层,如果是单行或者单列,会重复遍历。所以在遍历下侧和遍历左侧时,需要前提条件:如果 left < right 且 top < bottom 才遍历。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res = new ArrayList<Integer>();int rows = matrix.length, columns = matrix[0].length;int left = 0, right = columns - 1, top = 0, bottom = rows - 1;while(left <= right && top <= bottom) {for(int i = left; i <= right; i++) {res.add(matrix[top][i]);}for(int i = top + 1; i <= bottom; i++) {res.add(matrix[i][right]);}if(left < right && top < bottom) {for(int i = right - 1; i >= left; i--) {res.add(matrix[bottom][i]);}for(int i = bottom - 1; i > top; i--) {res.add(matrix[i][left]);}}left++;right--;top++;bottom--;}return res;}
}
http://www.dtcms.com/wzjs/616406.html

相关文章:

  • 上海知名装修公司排行贵州网站seo
  • 国税网站上如何做股权变更区块链外包开发
  • 淮安建设机械网站电商网站界面设计流程
  • 云南省建设教育协会网站网站开发加维护大概多少钱
  • 免费笑话网站系统php手机网站后台源码
  • 网站解析需要多久生效建设企业网站官网登录
  • 网站建设综合训练浙江建设厅 继续教育 网站
  • 嘉兴网站推广企业wordpress 登录界面插件
  • 网站建设与文字的工作太原建站公司有哪些
  • 企业网站升级企业注册资金变更流程
  • 开题报告电子商务网站建设怎么在百度上制作自己的网站
  • 扬州有做义工的地方或网站嘛无锡企业免费建站
  • 做网站申请域名大概花费多少网站关键词优化怎么做的
  • 科技网站建设 长沙英文网站建设公司
  • 谷歌外贸网站seo怎么做h5网站实例
  • 建站行业的乱象丹东网站网站建设
  • 宁波那家公司做网站好湖南省做网站那个企业便宜
  • 网站免费推广计划电商网站如何备案
  • 深圳建网站技术上海外包seo
  • 中小企业网站建设教程网站内容建设方案
  • 制作网站平台做食品网站用什么颜色
  • 网站开发哪里可做私活奖券世界推广网站
  • kocool网站开发网站建设部门管理制度
  • 苏州网站托管qq邮箱登录入口网页版
  • 济南做网络安全的公司广州seo公司品牌
  • 卡二卡三卡四精品系统优化最好的安卓手机
  • 开网站做女装好还是童装好做商城网站需要备案吗
  • 公司名称变更网站要重新备案网站怎么做显得简洁美观
  • 重庆知名网站高级感ppt模板
  • seo网站优化网站编辑招聘什么软件可以推广自己的产品