求二维子数组的和(剖析)

文章目录

  • 个人主页
  • JavaSE系列专栏
    • 前言:本篇剖析一下二维子数组求和
    • 规则:

个人主页

JavaSE系列专栏

前言:本篇剖析一下二维子数组求和

规则:

这是一个4 X 4的二维数组a[][]
求二维子数组的和(剖析)_第1张图片
假设再来一个4 X 4的空数组,
第一个位置是a[0][0],(前一个元素的和)
第二个位置是a[0][0]+a[0][1]+a[0][2],(前两个元素的和)
第三个位置是a[0][0]+a[0][1]+a[0][2],(前三个元素的和)
第四个位置是a[0][0]+a[0][1]+a[0][2]+a[0][3],
第五个位置是a[0][0]+a[1][0],

求二维子数组的和(剖析)_第2张图片

那么用java程序应该如何实现呢:
求二维子数组的和(剖析)_第3张图片
比如说:求值为7这个位置的和:1+2+3+5+6+7
求二维子数组的和(剖析)_第4张图片
可以分解为:三个红色的-一个重复的绿色
求二维子数组的和(剖析)_第5张图片
求二维子数组的和(剖析)_第6张图片
求二维子数组的和(剖析)_第7张图片
求二维子数组的和(剖析)_第8张图片
即:求二维子数组的和(剖析)_第9张图片

  //初始化数组
        int [][] a=new int[2][2];
        for (int i = 0; i <a.length ; i++) {
            for (int j = 0; j <a[i].length ; j++) {
                a[i][j]=1;
            }
            System.out.println(Arrays.toString(a[i]));
        }
        //存储求和的数组
        int[][] sum=new int[a.length+1][a[0].length+1];//这里需要额外加一行+加一列
        for (int i = 1; i <sum.length ; i++) {
            for (int j = 1; j <sum.length ; j++) {//核心语句:
                sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i-1][j-1];//行成立的+列成立的-重合的+新增的
            }
        }

        //打印出结果
        for (int i = 0; i <sum.length ; i++) {
            System.out.println(Arrays.toString(sum[i]));
        }

求二维子数组的和(剖析)_第10张图片

你可能感兴趣的:(Java每日一题,java,算法,开发语言)