<p>You start at the cell <code>(rStart, cStart)</code> of an <code>rows x cols</code> grid facing east. The northwest corner is at the first row and column in the grid, and the southeast corner is at the last row and column.</p>

<p>You will walk in a clockwise spiral shape to visit every position in this grid. Whenever you move outside the grid&#39;s boundary, we continue our walk outside the grid (but may return to the grid boundary later.). Eventually, we reach all <code>rows * cols</code> spaces of the grid.</p>

<p>Return <em>an array of coordinates representing the positions of the grid in the order you visited them</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/08/24/example_1.png" style="width: 174px; height: 99px;" />
<pre>
<strong>Input:</strong> rows = 1, cols = 4, rStart = 0, cStart = 0
<strong>Output:</strong> [[0,0],[0,1],[0,2],[0,3]]
</pre>

<p><strong class="example">Example 2:</strong></p>
<img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/08/24/example_2.png" style="width: 202px; height: 142px;" />
<pre>
<strong>Input:</strong> rows = 5, cols = 6, rStart = 1, cStart = 4
<strong>Output:</strong> [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= rows, cols &lt;= 100</code></li>
	<li><code>0 &lt;= rStart &lt; rows</code></li>
	<li><code>0 &lt;= cStart &lt; cols</code></li>
</ul>

class Solution {
public:
    void completeCycle(int i, int j, int d, vector<vector<int>> &ans, int total_rows, int total_cols){
        // down from (i,j) for d dist.
        // left for d+1 dist;
        // up for d+1 dist
        // right for d+1 dist
        // cycle complete

        if(i>=0 && i<total_rows && j>=0 && j<total_cols) ans.push_back({i,j});
        cout<<d<<endl;
        cout<<"Hello"<<endl;

        // down
        int curr_d = 0;
        while(curr_d < d){
            i+=1;
            j+=0;
            if(i>=0 && i<total_rows && j>=0 && j<total_cols) ans.push_back({i,j});
            curr_d++;
        }


        // left
        curr_d = 0;
        d++;
        while(curr_d<d){
            i+=0;
            j-=1;
            if(i>=0 && i<total_rows && j>=0 && j<total_cols) ans.push_back({i,j});
            curr_d++;
        }

        // up
        curr_d =0;
        while(curr_d<d){
            i-=1;
            j+=0;
            if(i>=0 && i<total_rows && j>=0 && j<total_cols) ans.push_back({i,j});
            curr_d++;
        }

        // right
        curr_d =0;
        while(curr_d<d){
            i+=0;
            j+=1;
            if(i>=0 && i<total_rows && j>=0 && j<total_cols) ans.push_back({i,j});
            curr_d++;
        }

        return;

    }

    vector<vector<int>> spiralMatrixIII(int rows, int cols, int rStart, int cStart) {
        vector<vector<int>> ans;
        ans.push_back({rStart,cStart});
        int max_cycles = max(rows,cols);
        int i=0;
        int j=1;
        int curr_cycle = 1;
        int curr_odd = 1;
        while(curr_cycle<=max_cycles){
            completeCycle(rStart+i,cStart+j,curr_odd,ans,rows,cols);
            i-=1;
            j+=1;
            curr_odd+=2;
            curr_cycle++;
        }
        cout<<"hello"<<endl;
        return ans;

    }
};
14600