题解 | #螺旋矩阵#清晰易懂

螺旋矩阵

http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

vector<int> spiralOrder(vector<vector<int> > &matrix) {
    if(matrix.empty()) return {};
    int a = matrix.size();
    int b = matrix[0].size();

    vector<int> result;
    int cicleNum = (min(a,b)+1)/2; //向下取整,代表循环几次

    int left = 0,top=0;
    int right = matrix[0].size()-1, bottom = matrix.size()-1;
    while(cicleNum--){ //顺时针
        for(int i = left;i<=right;i++)//从左到右
           result.push_back(matrix[top][i]);
        for(int j = top+1;j<=bottom;j++)//从上到下
            result.push_back(matrix[j][right]);
        for(int k = right-1;k>=left && top!=bottom;k--) //从右到左,注意 top!=bottom,防止重复
            result.push_back(matrix[bottom][k]);
        for(int l = bottom-1;l>top && left!=right;l--) //从下到上,注意 left!=right,防止重复
            result.push_back(matrix[l][left]);
        left++; right--; top++; bottom--;
    }
    return result;
}
全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务