题解 | #顺时针打印矩阵#

顺时针打印矩阵

http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

class Solution {

private:
    vector<int> target;
    vector<vector<bool>> record;
    vector<vector<int> > matrix_;
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {

            matrix_ = matrix;
            int row = matrix.size();
            int col = matrix[0].size();//没有空的输入

            record = vector<vector<bool>>(row+2,vector<bool>(col+2,true));//使用↕↔各自扩展1维的二维bool表记录

            //边界设置为false,这样只能遍历路径还是true的位置,而遍历之后,true就改成false
            for (int i = 0; i < col + 2; i++)         record[0][i] = false, record[row + 1][i] = false;
            for (int j = 0; j < row + 2; j++)         record[j][0] = false, record[j][col+1] = false;

            //递归,从1,1左上角开始
            go_next(1,1);

            return target;
    }


private:
        void go_next(int y,int x)
        {
            target.push_back(matrix_[y-1][x-1]);//加入路径
            record[y][x] = false;//遍历过了,设置为false

           //规定顺时针,按→↓←↑的顺序依次进行就可以了,二维bool表是关键
           if(record[y][x+1] &&! record[y-1][x])//→  添加 &&!的条件: 
           //比如图里9的位置,既能↑也可以→的情况下,优先向上移动,第一次没加只过了9组用例
                go_next(y,x+1);
           else if(record[y+1][x])//↓
                go_next(y+1,x);
           else if(record[y][x-1])//←
                go_next(y,x-1);
           else if(record[y-1][x])//↑
                go_next(y-1,x);
        }


};

图片说明

全部评论

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务