经典算法题1-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

在这里插入图片描述
话不多说,代码如下:

public class Text {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int[][] arr = new int[100][100];

        System.out.print("输入矩阵的列数:");
        int line = sc.nextInt();
        System.out.print("输入矩阵的行数:");
        int list = sc.nextInt();
        System.out.println("矩阵如下:");

        //生成一个二维数组
        for (int i = 1; i <=line ; i++) {
            for (int j = 1; j <=list ; j++) {
                arr[i][j] = i*10 + j;
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println("---------------------------------");

        System.out.println("运行结果如下:");
        getResult(arr,line,list,1);
    }

    /**
     * 利用一圈一圈打印 矩阵
     * @param arr 传入二维数组
     * @param line 行
     * @param list 列
     * @param start 默认从1开始,依次增加, 即第一次从arr[1][1]开始,调用递归从arr[2][2]开始
     */
    private static  void getResult(int[][] arr,int line,int list,int start) {
        //如果行大于列   竖长方形
        int temp;
        if(line > list){
            temp = list;
        } else {
            // 列大于行 横长方形 , 因为正方向的话line = list,这里统一取line
            temp = line;
        }
        //
        if(start <= temp) {
            // 打印第一行 首位都打印  左 - 右
            for (int j = start; j <=list ; j++) {
                System.out.print(arr[start][j] + " ");
            }
            //打印最右边一列,有尾无头 上 - 下
            for (int i = start + 1; i <=line ; i++) {
                System.out.print(arr[i][list] + " ");
            }
            // 打印最下边一行,有尾无头 右 - 左
            for (int j = list -1; j >=start ; j--) {
                System.out.print(arr[line][j]+ " ");
            }
            // 打印最左边一行,无头无尾  下-上
            for (int i = line -1; i >start  ; i--) {
                System.out.print(arr[i][start] + " " );
            }
            // 一圈打印完毕, 行列-1,start+1.
            getResult(arr,line - 1,list-1,start+1);
        }
    }
}

目前我觉得我能写到的最好的程度了,若有优化,期待交流.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值