LeetCode: Spiral Matrix 2
30日に挑戦しようと思っていたのに….ははは
今週の車はあまり運転していませんが...
なんだ.言い訳ですが、海外サイトなので韓国時間ではないので、いつもタイミングを逃しています.
与えられた問題は難しくない.
これは2 D配列を螺旋で埋めて戻せばよいという問題です.
スパイラル方向に充填し、dirI、dirJアレイで方向を順次充填します.
実は一方向に移動するので、配列から離れる条件は一方向ごとに1つです.
したがってswitch文で対応する条件をチェックし,配列に値を指定しておけば方向を変えるので,その部分もチェックした.
今週の車はあまり運転していませんが...
なんだ.言い訳ですが、海外サイトなので韓国時間ではないので、いつもタイミングを逃しています.
問題を解く
与えられた問題は難しくない.
これは2 D配列を螺旋で埋めて戻せばよいという問題です.
スパイラル方向に充填し、dirI、dirJアレイで方向を順次充填します.
実は一方向に移動するので、配列から離れる条件は一方向ごとに1つです.
したがってswitch文で対応する条件をチェックし,配列に値を指定しておけば方向を変えるので,その部分もチェックした.
import java.util.*;
class Solution {
static int[] dirI = {0, 1, 0, -1};
static int[] dirJ = {1, 0, -1, 0};
public int[][] generateMatrix(int n) {
int[][] answer = new int[n][n];
int count = 1;
int dirNumber = 0;
int indexI = 0;
int indexJ = 0;
while(true) {
if(count > n * n) {
break;
}
answer[indexI][indexJ] = count++;
int nextI = indexI + dirI[dirNumber];
int nextJ = indexJ + dirJ[dirNumber];
switch (dirNumber) {
case 0:
if(nextJ >= n || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
case 1:
if(nextI >= n || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
case 2:
if(nextJ < 0 || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
default:
if(nextI < 0 || answer[nextI][nextJ] != 0) {
dirNumber++;
dirNumber %= 4;
nextI = indexI + dirI[dirNumber];
nextJ = indexJ + dirJ[dirNumber];
}
}
indexI = nextI;
indexJ = nextJ;
}
return answer;
}
}
Reference
この問題について(LeetCode: Spiral Matrix 2), 我々は、より多くの情報をここで見つけました https://velog.io/@wonhee010/LeetCode-Spiral-Matrix-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol