498.对角线遍历

498.对角线遍历

将集中特殊情况打印出来,最后解决其他情况;

 

class Solution {
public:
	vector<int> findDiagonalOrder(vector<vector<int>>& matrix) 
	{
		vector<int> ans;
		if (matrix.empty())
		{
			return ans;
		}
		int m = matrix.size(), n = matrix[0].size();
		int i = 0, j = 0;
		bool confine = 0;
		if (m==1)
		{
			return matrix[0];
		}
		if (n==1)
		{
			for (int k = 0; k < m; k++)
			{
				ans.push_back(matrix[k][0]);
			}
			return ans;
		}
		while (i < m&&j < n)
		{
			ans.push_back(matrix[i][j]);
			dis(ans);

			 if ((i+j)%2==0)
			 {
				 if (i == 0 && j != n - 1)
					 j++;
				 else if (i != 0 && j == n - 1)
					 i++;
				 else if (i == 0 && j == n - 1)
					 i++;
				 else
					 i--, j++;
			 }
			 else
			 {
				 if (j == 0 && i != m - 1)
					 i++;
				 else if (i == m - 1 && j != 0)
					 j++;
				 else if (i == m - 1 && j == 0)
					 j++;
				 else
					 i++, j--;
			 }

		}
		//ans.push_back(matrix[m][n]);
		//dis(ans);
		return ans;
	}
	void dis(vector<int>s)
	{
		for (int i = 0; i < s.size(); i++)
		{
			cout << s[i] << " ";
		}
		cout << endl;
	}
};

猜你喜欢

转载自blog.csdn.net/kongqingxin12/article/details/84308815