顺时针打印二位数组-创新互联
顺时针打印二维数组
题目简述
新闻标题:顺时针打印二位数组-创新互联
分享链接:http://myzitong.com/article/cseoos.html
- 给定一个N*M的整型二维数组,要求以(0,0)为起点,由外层向内层,按顺时针方向依次输出全部元素
例如矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
方案是一圈一圈打印
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、雅安服务器托管、营销软件、网站建设、蒲城网站维护、网站推广。
在写代码过程中要注意矩阵中下标的记录
先设定好边界,行、列,还有初始值。设定好边界后,用while去遍历打印的动作,先右后下再左再上,这个顺时针的动作,因为你会发现其实顺时针的规律也就这样,只要重复循环这个动作即可得出答案。
- 顺时针输出全部元素,第一步就要先打印出上边一条边(即matrix[0][0]~matrix[0][N-1]);
//上边一条边 while (leftUpCol<= rightDownCol) { System.out.println(matrix[leftUpRow][leftUpCol++] + " "); } //恢复 leftUpCol = rightDownCol; leftUpRow++;
- 第二步打印出右边一条边(即matrix[1][N-1]~matrix[N-1][N-1]);
//右边一条便边 while (leftUpRow<= rightDownRow) { System.out.println(matrix[leftUpRow++][leftUpCol]); } //恢复 leftUpRow = rightDownRow; leftUpCol--;
- 第三步打印出下边一条边(即array[n-1][n-2]~array[n-1][0]);
下边一条边是列在减少
则leftUpRow需要 >= 0
所以要重新将指针赋值,并将后边的指针变量进行修改//下边一条边 while (c >= leftUpCol) { System.out.println(matrix[r][c--]); } //恢复 c = leftUpCol; r--;
- 第四步打印出左边一列(即array[0][n-2]~array[1][0]).
while (r >leftUpRow){ System.out.println(matrix[r--][c]); }
- 至此,已经将二维数组的最外围打印出来了,将最外围的数组元素去除之后,可以发现里面的数组是一个新的二维数组,所以,可以用递归来实现。
应该数据初始化之后继续加上一个while循环
并且leftUpRow和leftUpCol应该递增,rightDownRow和rightDownCol应该递减
在外循环中r和c应该每次都进行初始化
while (leftUpRow<= rightDownRow && leftUpCol<= rightDownCol) {……};
源代码public class Case01_Print2DArr {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16},
};
print(matrix);
}
static void print(int[][] matrix) {
int leftUpRow = 0, leftUpCol = 0;//设置好边界值
rightDownRow = matrix.length - 1;//行
rightDownCol = matrix[0].length - 1;//列
while (leftUpRow<= rightDownRow && leftUpCol<= rightDownCol) {//设置边界,且遍历
int r = leftUpRow, c = leftUpCol;//更新步骤的初始值
//上边一条边
while (c<= rightDownCol) {
System.out.println(matrix[r][c++]);
}
//恢复
c = rightDownCol;
r++;
//右边一条便边
while (r<= rightDownRow) {
System.out.println(matrix[r++][c]);
}
//恢复
r = rightDownRow;
c--;
//下边一条边
while (c >= leftUpCol) {
System.out.println(matrix[r][c--]);
}
//恢复
c = leftUpCol;
r--;
while (r >leftUpRow) {
System.out.println(matrix[r--][c]);
}
leftUpRow++;
leftUpCol++;
rightDownRow--;
rightDownCol--;
}
}
}
测试结果
注意1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
- 在最初写的代码举的例子一定是很特殊或者很规整的,所以写完代码之后应该学会去修改数据测试代码的可行性
- 写代码的逻辑一定要非常清楚,并且变量的命名最好使用意思明确的一串字符来表示
- 在写代码之前要保持思路清晰,把大的问题拆解成一个个小的问题逐一解决
- 编程要学会多多思考多多优化自己的代码
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻标题:顺时针打印二位数组-创新互联
分享链接:http://myzitong.com/article/cseoos.html