LeetCode - Spiral Matrix II

Spiral Matrix II

2013.12.21 01:54

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 ]

]

Solution:

  Still spiral order traversal of an m X n matrix, please see "LeetCode - Spiral Matrix" for more detail.

  Time complexity is O(m * n), space complexity is O(1).

Accepted code:

 1 // 4CE, 2RE, 1AC, such a terrible record..

 2 class Solution {

 3 public:

 4     vector<vector<int> > generateMatrix(int n) {

 5         // IMPORTANT: Please reset any member data you declared, as

 6         // the same Solution instance will be reused for each test case.

 7         

 8         int i, j;

 9         // 1CE here, declaration for int i is missing

10         for(i = 0; i < result.size(); ++i){

11             result[i].clear();

12         }

13         result.clear();

14         

15         // 1RE here, special treatment for 0

16         if(n <= 0){

17             return result;

18         }

19         

20         for(i = 0; i < n; ++i){

21             result.push_back(vector<int>());

22             for(j = 0; j < n; ++j){

23                 result[i].push_back(0);

24             }

25         }

26         

27         // 1CE here, declaration of d is missing

28         int d, x, y, x1, y1, nn;

29         nn = 1;

30         x = 0;

31         y = 0;

32         d = RIGHT;

33         while(true){

34             result[x][y] = nn++;

35             // 1RE here, judge statement should be put after nn++;

36             if(nn > n * n){

37                 break;

38             }

39             while(true){

40                 x1 = x + dir[d][0];

41                 y1 = y + dir[d][1];

42                 if(x1 < 0 || x1 > n - 1 || y1 < 0 || y1 > n - 1 || result[x1][y1] > 0){

43                     // already assigned

44                     d = (d + 1) % 4;

45                 }else{

46                     x = x1;

47                     y = y1;

48                     break;

49                 }

50             }

51         }

52         

53         return result;

54     }

55 private:

56     const int RIGHT = 0;

57     const int DOWN = 1;

58     const int LEFT = 2;

59     const int UP = 3;

60     int dir[4][2] = {

61         // 1CE here, SBC case problem with comma...

62         {0, 1}, {1, 0}, {0, -1}, {-1, 0}

63     };// 1CE here, semicolon missing

64     vector<vector<int>> result;

65 };

 

你可能感兴趣的:(LeetCode)