首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    顺时针打印矩阵

    前言 有一个矩阵,如何按照从外向里以顺时针的顺序依次打印出每一个元素?本文将跟大家分享下这个算法,欢迎各位感兴趣的开发者阅读本文。..., 16] ]; 顺时针访问一个矩阵,那么它的访问过程就如下图所示: image-20220902162024010 观察上图后,我们可以很明显的知道可以通过一个循环来打印这个矩阵,每次打印矩阵的一个圈...假设矩阵的行数为rows,列数为cols,打印第一圈的左上角坐标是(0,0),第二圈的左上角坐标是(1,1),以此类推,我们注意到左上角的坐标中,行标与列标总是相同的,于是可以在矩阵中选取左上角为(start...将其作为行坐标 start作为列坐标 输出每一个元素 image-20220902223700585 实现代码 经过上面的分析,我们已经有了缜密的逻辑,接下来我们就可以愉快地进行编码了,如下所示: // 顺时针打印矩阵...PrintMatrixInCircle(matrix, cols, rows, start); start++; } } // 打印矩阵的一圈 function PrintMatrixInCircle

    49820

    顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10...题目链接:https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?...在矩阵中用左上角的坐标(startX, startY)和右下角的坐标(endX, endY)就可以表示一个子矩阵,比如例子中的矩阵,当(startX, startY)=(0, 0)时、(endX, endY...   13  14  15  16 如果能把这个子矩阵的外层转圈打印出来,那么就把startX, startY加1, 即(startX, startY) = (1, 1), 再把endX, endY减...1,即(endX, endY) = (2, 2),此时表示子矩阵如下    6     7   10   11 将这个子矩阵转圈打印出来,接着把startX, startY加1, 即(startX, startY

    18220

    剑指offer - 顺时针打印矩阵 - JavaScript

    题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字...这一题和Leetcode 54.螺旋矩阵一模一样。Leetcode 的题目要求如下: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。...题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字...解法 1: 模拟路径 根据直觉,当遍历的过程中,遇到超出边界 / 元素已经被访问过的情况时,应该按照顺时针转变方向。 假设给定的矩阵的形状是 m*n,那么一共要遍历 m*n 次。...要准备一个记录方向的数组,里面方向的排列顺序是顺时针。 时间复杂度为 O(M*N),空间复杂度为 O(M*N)。

    54610

    每日一起 剑指offer (顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10....解析 顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,要判断从左向右打印和从右向左打印的时候是否会出现重复打印,同样只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况...row:collor)-1)/2+1;//圈数 for(int i=0;i<circle;i++){ //从左向右打印 for(int j...for(int k=i+1;k<row-i;k++) res.push_back(matrix[k][collor-1-i]); //判断是否会重复打印

    33030

    顺时针打印矩阵

    顺时针打印矩阵 思路1# 其实就是按照理解题目的意思一步步从外层到内层打印出来,同时将一个外层分成四个部分分步打印 可以用一个变量count来维护当前打印的第几层 判断打印结束了的条件是:count*2...<column && count*2<row 但是要注意的是边界条件的判断,可能最里面的一层不一定要四边全部都打印出来的情况记得判断 代码# class Solution { public int...int endColumn = column - 1 - count; int endRow = row - 1 - count; // 打印上方...// 只有这个不用判断,因为是最先打印的这个 // 如果最内圈只有一行,那么其他三个方向就都不要打印了,所以其他三个方向要判断...endColumn; i++) { res[position++] = matrix[count][i]; } // 打印右侧

    38530
    领券