59. 螺旋矩阵 II LeetCode刷题记 java写法

这里一定要坚持循环不变量原则(就像之前的二分查找要坚持左闭右开一样):

这里画矩阵的时候要保证每次画四条边的时候每一条边的元素数量都要保证一样,如图所示,其中橙色表示第一次循环,蓝色表示第二次循环。

随后如果n是奇数,最中间还会留下一个空缺,只要最后额外填充一下就可以了

public static int[][] generateMatrix(int n) {
    int[][] nums = new int[n][n];
    int startX = 0;
    int startY = 0;
    int offset = 1;
    int count = 1;      //实际要插入的数字
    for (int i = 0; i < n / 2; i++) {

        startX = i;
        for (int x = startX; x < n - offset; x++) {
            nums[startX][x] = count++;
        }
        startY = i;
        for (int y = startY; y < n - offset; y++) {
            nums[y][n - 1 - startY] = count++;
        }
        startX = n - 1 - i;
        for (int x = startX; x > i; x--) {
            nums[startX][x] = count++;
        }
        startY = n - 1 - i;
        for (int y = startY; y > i; y--) {
            nums[y][n - 1 - startY] = count++;
        }
        offset++;
    }
    if (n % 2 != 0) {
        nums[n / 2][n / 2] = n * n;
    }
    return nums;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值