网站怎么改域名,dw网站制作怎么做滑动的图片,lamp环境wordpress,安乡网站制作本文参考自《剑指offer》一书#xff0c;代码采用Java语言。题目输入一个矩阵#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。思路每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示)#xff0c;每次都是这个操作#xff0c;所以可以采用递归。每次…本文参考自《剑指offer》一书代码采用Java语言。题目输入一个矩阵按照从外向里以顺时针的顺序依次打印出每一个数字。思路每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示)每次都是这个操作所以可以采用递归。每次打印矩阵的左上角的横纵坐标相同即为start而其余三个角的坐标都与行列数以及start有关因此只需要for循环即可实现打印。当然其实只要针对start进行循环判断start*2的值小于行数和列数时才需要继续打印这样通过这个条件可以用循环来打印每次的最外圈矩阵。测试算例多行多列单行多列多行单列一个数的矩阵空矩阵nullJava代码//题目输入一个矩阵按照从外向里以顺时针的顺序依次打印出每一个数字。public class PrintMatrix {public void printMatrix(int[][] matrix) {if(matrixnull || matrix.length0)return;printMatrixInCircle(matrix, 0);}private void printMatrixInCircle(int[][] matrix,int start) {int rowmatrix.length;int colmatrix[0].length;int endXcol-1-start;int endYrow-1-start;if(endXreturn;//仅一行if(endYstart) {for(int istart;iendX;i) {System.out.print(matrix[start][i] );}return; //记得结束}//仅一列if(endXstart) {for(int istart;iendY;i) {System.out.print(matrix[i][start] );}return; //记得结束}//打印边界for(int istart;iendX;i) {System.out.print(matrix[start][i] );}for(int istart1;iendY;i) {System.out.print(matrix[i][endX] );}for(int iendX-1;istart;i--) {System.out.print(matrix[endY][i] );}for(int iendY-1;istart1;i--) {System.out.print(matrix[i][start] );}//继续打印更内部的矩阵令start1printMatrixInCircle(matrix, start1);}public static void main(String[] args) {PrintMatrix demo new PrintMatrix();int[][] a {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};//int[][] a {};//int[][] a {{}};//int[][] a {{1}};//int[][] a {{1,2,3,4}};//int[][] a {{1},{2},{3},{4}};//int[][] a {{1,2,3},{4,5,6}};//int[][] anull;demo.printMatrix(a);}下面的代码是来自牛客网的C代码1.采用的是循环2.在打印一圈时单行或者单列情况只需要在从右往左打印和从下往上打印时判断是否会出现重复打印(即后面两个for循环)。代码比较简洁。/*解题思路顺时针打印就是按圈数循环打印一圈包含两行或者两列在打印的时候会出现某一圈中只包含一行要判断从左向右打印和从右向左打印的时候是否会出现重复打印同样只包含一列时要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况*/class Solution {public:vector printMatrix(vector matrix) {vectorres;res.clear();int rowmatrix.size();//行数int collormatrix[0].size();//列数//计算打印的圈数int circle((rowfor(int i0;i//从左向右打印for(int ji;jres.push_back(matrix[i][j]);//从上往下的每一列数据for(int ki1;kres.push_back(matrix[k][collor-1-i]);//判断是否会重复打印(从右向左的每行数据)for(int mcollor-i-2;(mi)(row-i-1!i);m--)res.push_back(matrix[row-i-1][m]);//判断是否会重复打印(从下往上的每一列数据)for(int nrow-i-2;(ni)(collor-i-1!i);n--)res.push_back(matrix[n][i]);}return res;}};收获1.打印一圈矩阵时注意单行或者单列时是否会重复打印。2.每一圈矩阵左上角的横纵坐标相等其余三个角的坐标可以由左上角坐标获得。3.打印矩阵的圈数与其列数或者行数的一半有关。简单但要能想到。