二維陣列順時針螺旋遞增

2021-08-20 02:28:37 字數 1288 閱讀 3667

之前去美團面試,被問到如題目的演算法問題,因為之前沒有解決過類似的問題,所以當時沒有答出來,今天在網上搜了一下,都是通過多次迴圈來實現的,覺得演算法效率低,自己琢磨用遞迴實現乙個,實現的思路是用遞迴,不斷變化二維陣列的行、列下標來實現螺旋,遞增就很簡單,有乙個值一直++,然後給二維陣列相應位置複製就可以了,此演算法的難點在於行、列下標狀態的變化與增減,不廢話了,直接附**:

public class arrayalgorithm else

break;

case 0: //不變的情況下,不需要狀態的改變,所以不需要寫**

break;

case -1:

if(rowindex==0||array[rowindex-1][columnindex]>0)else

break;

}//計算rowindex end

//計算columnindex begin

if (!rowchangestate) else

break;

case 0://不變的情況下,不需要狀態的改變,所以不需要寫**

break;

case -1:

if(columnindex==0||array[rowindex][columnindex-1]>0)else

break;}}

//計算columnindex end

fillnum(array,rowindex,columnindex,rowmax,columnmax,increase,maxnum,rowincrease,columnincrease);

}}

列印輸出的結果:

1  2  3  4  5  6  7  8  9 10

36 37 38 39 40 41 42 43 44 11

35 64 65 66 67 68 69 70 45 12

34 63 84 85 86 87 88 71 46 13

33 62 83 96 97 98 89 72 47 14

32 61 82 95100 99 90 73 48 15

31 60 81 94 93 92 91 74 49 16

30 59 80 79 78 77 76 75 50 17

29 58 57 56 55 54 53 52 51 18

28 27 26 25 24 23 22 21 20 19

最後乙個需要注意的地方提示一下,如果二維陣列很大,如100,在執行時會報stackoverflowerror異常,需要在啟動引數中加入-xss2m來修改執行緒棧的大小,這樣就可以執行了。

順時針螺旋列印二維陣列

想起來一道做過兩次的競賽題,明明之後重寫了標程第二次還是想不起來怎麼寫了,愣是連續兩次打表過 捂臉 題目 1,2,3 n n 的數字按照順時針螺旋的形式列印成矩陣,如下 輸入數字2,則程式輸出 1 24 3 輸入數字3,則程式輸出 1 2 3 8 9 4 7 6 5 輸入數字4,則程式輸出 1 2 ...

順時針列印二維陣列

如果看不懂,可參照劍指offer128頁 include include using namespace std 方法一 傳vector 需要傳引用 方法二 傳二維指標 按圈給陣列賦值 void printmatrixincircle int vector numbers,int rows,int ...

順時針列印二維陣列

一 題目 要求 輸入乙個陣列,從外到裡順時針列印陣列中的元素,例如輸入矩陣 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9,5,6,7 二 思路 按圈列印,記錄每圈的起始位置 行號 列號 特殊行或列需要判斷防止出現空指標異常。三 public c...