LeetCode Spiral Matrix II

题目:

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]
题意:

给一个n * n的数组,然后就是采用顺时针的方向将这个数组填满,那么我们考虑,注意此题和之前的那题有点类似,但是也不是非常相像,因为这题比较简单,不会出现n * m的那种矩阵,一定是n * n的形式,所以我们在将所有数字输入到数组中的时候,可以继续考虑用上一题的思路来做。

public int[][] generateMatrix(int n)
	{
		int[][] result = new int[n][n];
		int startV = 1;
		int startX = 0;
		int startY = 0;
		int endX = n - 1;
		int endY = n - 1;
		while(startX <= endX)
		{
		    startV = fillMatrix(startX,endX,startY,endY,result,startV);//这里的startV每次都得保存的,并且作为返回值返回作为下一次的一个参数输入的
			startX++;
			startY++;
			endX--;
			endY--;
		}                //所以这里是个技巧
		return result;
	}
	public int fillMatrix(int rowstart,int rowend,int colstart,int colend,int[][] result,int startV)
	{
		if(rowstart == rowend)   //如果只有一个元素,那么直接将这个元素保存进数组中
		{
		    result[rowstart][colstart] = startV;
		    return -1;
		}
		//上边,遍历每一边,但是得注意的是,这里的startV是作为返回值返回的
		for(int i = colstart; i <= colend; i++)
		{
			result[rowstart][i] = startV;
			startV++;
		}
		//右边
		for(int i = rowstart + 1; i <= rowend; i++)
		{
			result[i][colend] = startV;
			startV++;
		}
		//下边,注意有些位置不用再加了
		for(int i = colend - 1; i >= colstart; i--)
		{
			result[rowend][i] = startV;
			startV++;
		}
		//左边
		for(int i = rowend - 1; i >= rowstart + 1; i--)
		{
			result[i][colstart] = startV;
			startV++;
		}
		return startV;
	}

此题这里需要注意,和之前的那题相得益彰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值