nas 支持做网站,网站建设相关推荐,模板商城建站,做网站意义目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言
当前所有算法都使用测试用例运行过#xff0c;但是不保证100%的测试用例#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识#xff01; 问题介绍 …
目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言
当前所有算法都使用测试用例运行过但是不保证100%的测试用例如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识 问题介绍
原问题 给定int[][] arr 二维数组转圈打印矩阵序列 如 [12345678910111213141516]\begin{bmatrix} 1 2 3 4 \\ 5 6 7 8 \\ 9 10 11 12 \\ 13 14 15 16 \end{bmatrix}15913261014371115481216
打印结果1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
解决方案
原问题 将打印过程拆解为两个步骤 1、从外圈到内圈的过程为一个循环 2、转圈打印为一个循环 每一次外圈往内圈走一格时向转圈方法传入(开头、宽度、高度)即可让转圈方法打印当前层
代码编写
java语言版本
原问题 /*** 二轮测试转圈打印*/public static void spiralOrderPrintCp1(int[][] arr) {if (arr null || arr.length 0) {return;}// 横向int len arr.length;// 纵向int len2 arr[0].length;// 打印边界int boundR len/2 1;int boundL len2/2 1;int i 0;int j 0;while (i boundR j boundL) {processCp(arr , i, j, len2, len);len-2;len2-2;i;j;}}/*** 二轮测试打印一圈支持长方形* param arr* param i 起点横坐标* param j 起点纵坐标* param wide 宽度* param height 高度*/private static void processCp(int[][] arr, int i, int j, int wide, int height) {int i1 i;int j1 j;int wideBound j wide;int heightBound i height;// 横向while (j1 wideBound) {System.out.println(arr[i1][j1]);j1;}// j1此时超出去一个j1--;i1;// 纵向while (i1 heightBound) {System.out.println(arr[i1][j1]);i1;}i1--;j1--;// 横向回while (j1 j) {System.out.println(arr[i1][j1]);j1--;}j1;i1--;// 纵向回while (i1 i) {System.out.println(arr[i1][j1]);i1--;}}public static void main(String[] args) {spiralOrderPrintCp1(new int[][]{{1,2,3},{5,6,7},{9,10,11},{13,14,15}});}c语言版本
正在学习中
c语言版本
正在学习中
思考感悟
矩阵的打印类型题目很多都是将整个复杂的过程拆解为几个单独的循环循环预循环之间协作通过入参进行通信。主要两个点 1、过程拆解为几个小步骤可以使用循环实现 2、小步骤之间交互参数的确认
写在最后 方案和代码仅提供学习和思考使用切勿随意滥用如有错误和不合理的地方务必批评指正~ 如果需要git源码可邮件给2260755767qq.com 再次感谢左大神对我算法的指点迷津