• leet code 54 第二次做数组顺时针展开


    1, 将展开方向使用enum表示;

    2,想好循环终止的条件-》转方向时下一次要访问的点越界或者已经访问过

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            vector<int> result;
            if (matrix.empty()) {
                return result;
            }
            if (matrix.front().empty()) {
                return result;
            }
    
            int m = matrix.size() - 1;
            int n = matrix.front().size() - 1;
            vector<vector<bool>> visted(matrix.size(), vector<bool>(matrix.front().size(), false));
    
            int i = 0;
            int j = 0;
            
            enum Direction {RIGHT, DOWN, LEFT, UP};
            Direction dir = Direction::RIGHT;
    
            while(1) {
                if (dir == Direction::RIGHT) {
                    result.emplace_back(matrix[i][j]);
                    visted[i][j] = true;
                    // 到达右边界或者到达上一轮访问过的位置
                    if (j == n || visted[i][j + 1] == true) {
                        if (i == m || visted[++i][j]) {
                            break;
                        }
                        dir = Direction::DOWN;
                    }
                    else if(visted[i][++j] == true) {
                        break;
                    }
                }
                else if (dir == Direction::DOWN) {
                    result.emplace_back(matrix[i][j]);
                    visted[i][j] = true;
                    if (i == m || visted[i + 1][j] == true) {
                        if (j == 0 || visted[i][--j]) {
                            break;
                        }
                        dir = Direction::LEFT;
                    }
                    else if(visted[++i][j] == true) {
                        break;
                    }
                }
                else if (dir == Direction::LEFT) {
                    result.emplace_back(matrix[i][j]);
                    visted[i][j] = true;
                    if (j == 0 || visted[i][j-1] == true) {
                        if (i == 0 || visted[--i][j]) {
                            break;
                        }
                        dir = Direction::UP;
                    }
                    else if (visted[i][--j] == true) {
                        break;
                    }
                }
                else {
                    result.emplace_back(matrix[i][j]);
                    visted[i][j] = true;
                    if (i == 0 || visted[i - 1][j] == true) {
                        if (j == n || visted[i][++j]) {
                            break;
                        }
                        dir = Direction::RIGHT;
                    }
                    else if (visted[--i][j] == true){
                        break;
                    }
                }
            }
            return result;
        }
    };
    

      

  • 相关阅读:
    使用树莓派3获取CPU温度
    使用树莓派控制继电器
    Darknet图像训练的步骤
    Faster-Rcnn图像识别训练的步骤
    Centos7中ELK集群安装流程
    近年来较流行的搜索引擎框架
    机器学习中,使用NMS对框取优
    当前Azure中国可使用的虚拟机的Size列表
    汉语词性对照表[北大标准/中科院标准]
    Linux中禁用THP(Transparent Huge Pages)
  • 原文地址:https://www.cnblogs.com/rulin/p/14059017.html
Copyright © 2020-2023  润新知