[编程题] 回形打印出一个矩阵
[编程题] 回形打印出一个矩阵
题目信息
给定一个m*n的矩阵,再给一个起始值value,要求拿这个起始值进行连续的打印出一个回型的矩阵。
思路
定义上下左右边界,循环存储
注意
防止四个角的重复打印
Java代码
package demo08;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.logging.Level;
/**
* @author jiyongjia
* @create 2020/7/24 - 13:17
* @descp:
*/
public class DemoNo1_回行打印数组 {
public static void main(String[] args) {
//调用
int[][] arr = printArray(4, 4, 10);
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
public static int[][] printArray(int rows,int cols,int startValue){
//定义存储数组
int[][] res = new int[rows][cols];
//定义上下左右限
int left = 0;
int right = cols-1;
int up = 0;
int down = rows-1;
while (true){
//右
for(int i=left;i<=right;i++){
res[up][i] = startValue++;
}
if(++up > down) { break;}
//下
for(int i=up;i<=down;i++){
res[i][right] = startValue++;
}
if(--right<left) {break;}
//左
for(int i=right;i>=left;i--){
res[down][i] = startValue++;
}
if(--down<up) {break;}
//上
for(int i=down;i>=up;i--){
res[i][left] = startValue++;
}
if(++left>right) {break;}
}
return res;
}
}
输出:
给定的起始值是10:输出如下:
给定起始值0,输出如下