思路:從左往右在往下在往左在往上循環(huán),循環(huán)一次后從下一個起點再次循環(huán)輸出,直到所有的元素都已訪問function spiralOrder($matrix) {
? ? $start_m = 0;
? ? $start_n = 0;
? ? $list = [[0,1],[1,0],[0,-1],[-1,0]];
? ? $res = [];
? ? $m = count($matrix);
? ? $n = count($matrix[0]);
? ? //一層一層循環(huán),當起點已經(jīng)被訪問則退出循環(huán)
? ? while($matrix[$start_m][$start_n] !== false){
? ? ? ? array_push($res,$matrix[$start_m][$start_n]);
? ? ? ? $matrix[$start_m][$start_n] = false;
? ? ? ? //每一次從左往右再往下再往左再往上,每訪問一個元素標記此元素已訪問。
? ? ? ? foreach($list as $v){
? ? ? ? ? ? while($matrix[$start_m+$v[0]][$start_n+$v[1]] !== false && $start_m+$v[0] >=0 && $start_m+$v[0] < $m && $start_n+$v[1] >=0 && $start_n+$v[1] < $n){
? ? ? ? ? ? ? ? array_push($res,$matrix[$start_m+$v[0]][$start_n+$v[1]]);
? ? ? ? ? ? ? ? $matrix[$start_m+$v[0]][$start_n+$v[1]] = false;
? ? ? ? ? ? ? ? $start_m = $start_m+$v[0];
? ? ? ? ? ? ? ? $start_n = $start_n+$v[1];
? ? ? ? ? ? }
}
? ? ? ? $start_n = $start_n+1;
? ? }
? ? return $res;
}