N19_顺时针打印指针
题目描述
* 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
* 例如,如果输入如下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,
此题: 在牛客上 不能直接打印 需要将每一个数字添加到链表中 再由主函数直接调用链表实现。
package new_offer;
import java.util.ArrayList;
public class N19_1_PrintMatrix {
public ArrayList<Integer> printMatrix(int [][]matrix){
ArrayList re=new ArrayList();
int cols,rows;
rows=matrix.length;
cols=matrix[0].length;
int start=0;
//圈数
while(cols>start*2&&rows>start*2) {
//打印部分 分四步
{
int endx=cols-1-start;
int endy=rows-1-start;
//1 从左至右进行打印 至少有一行
for(int i=start;i<=endx;i++) {
int n=matrix[start][i];
re.add(n);
System.out.print(n);
System.out.print(" ");
}
//2 从上至下进行打印 至少有两列
if(start<endy) {
for(int i=start+1;i<=endy;i++) {
int n=matrix[i][endx];
re.add(n);
System.out.print(n);
System.out.print(" ");
}
}
//3 从右至左进行打印 至少有两行两列
if(start<endy&&start<endx) {
for(int i=endx-1;i>=start;i--) {
int n=matrix[endy][i];
re.add(n);
System.out.print(n);
System.out.print(" ");
}
}
//4 从下向上打印 至少有三行两列
if(start<endx&&(endy-start)>1) {
for(int i=endy-1;i>=start+1;i--) {
int n=matrix[i][start];
re.add(n);
System.out.print(n);
System.out.print(" ");
}
}
}
System.out.println(" ");
start++;
}
return re;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
N19_1_PrintMatrix n19=new N19_1_PrintMatrix();
int a[][]= {{1}};
int b[][]= {{1,2},{3,4}};
int c[][]= {{1,2,3}};
int d[][]= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
n19.printMatrix(a);
n19.printMatrix(b);
n19.printMatrix(c);
n19.printMatrix(d);
}
}

浙公网安备 33010602011771号