59. 螺旋矩阵 II

59. 螺旋矩阵 II

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • __59螺旋矩阵II_直接构造
    • __59螺旋矩阵II_直接构造简化版

原题链接:

59. 螺旋矩阵 II

https://leetcode.cn/problems/spiral-matrix-ii/description/

完成情况:

59. 螺旋矩阵 II_第1张图片

解题思路:

59. 螺旋矩阵 II_第2张图片
* 输入一个数,构造它的平方矩阵,按螺旋方向生成。
* 题目很直白,就是考察边界情况的考量

参考代码:

__59螺旋矩阵II_直接构造

package 日常Java程序测试.代码随想录.数组;

public class __59螺旋矩阵II_直接构造 {
	/**
	 * 输入一个数,构造它的平方矩阵,按螺旋方向生成。
	 * 题目很直白,就是考察边界情况的考量
	 *
	 *
	 * @param n
	 * @return
	 */
	public int[][] generateMatrix(int n) {
		int res [][] = new int[n][n];
		int sum = 1;    //用于记录当前应该给哪个数
		int rows = res.length - 1,column = res[0].length-1;
		int right = 0,left = 0;
		while (sum <= n*n){
			//上,判断
			for (int i = left;i<=column - left;i++ ){
				res[right][i] = sum;
				sum++;
			}
			if (sum > n*n){
				break;
			}
			//右,判断
			for (int i = right + 1;i<=rows - right;i++){
				res[i][column - left] = sum;
				sum++;
			}
			if (sum > n*n){
				break;
			}
			//下,判断
			for (int i = column - 1 - left;i>=left;i--){
				res[rows - right][i] = sum;
				sum++;
			}
			if (sum > n*n){
				break;
			}
			//左,判断
			for (int i = rows - 1 - right;i>=right + 1;i--){
				res[i][left] = sum;
				sum++;
			}
			if (sum > n*n){
				break;
			}
			right++;
			left++;
		}
		return res;
	}
}

__59螺旋矩阵II_直接构造简化版

package 日常Java程序测试.代码随想录.数组;

public class __59螺旋矩阵II_直接构造简化版 {
	/**
	 *
	 * @param n
	 * @return
	 */
	public int[][] generateMatrix(int n) {
		int res [][] = new int[n][n];
		int up = 0,down = n-1,left = 0,right = n-1,index = 1;
		while (index <= n * n){
			for (int i = left;i<=right;i++){
				res[up][i] = index++;
			}
			up++;
			for (int i = up;i<=down;i++){
				res[i][right] = index++;
			}
			right--;
			for (int i = right;i>=left;i--){
				res[down][i] = index++;
			}
			down--;
			for (int i = down;i>=up;i--){
				res[i][left] = index++;
			}
			left++;
		}
		return res;
	}

}

你可能感兴趣的:(#,LeetCode题解,算法知识,java学习,矩阵,线性代数,java,算法)