zoukankan      html  css  js  c++  java
  • 剑指offer 矩阵中的路径

    题目描述

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
     
    思路:
    二维矩阵转化为一维矩阵:i * (列数) + 当前列。
    这是道搜索题目,深度优先搜索,在矩阵中搜索等于字符串。记住开始点可以是任意位置,这里使用两个for循环进行遍历。在使用一个helper函数,记住DFS是之前改变的状态一定要在后面改变回来。搜索过的字符设置为‘0’,改变回来的时候等于字符串的对应字符。
    class Solution {
    public:
        bool helper(char* matrix, int rows, int cols, char* str,int i,int j,int idx){
            if(idx == strlen(str)){
                return true;
            }
            bool result = false;
            if(!(i >= 0 && j >= 0 && matrix[i * cols + j] == str[idx])){
                return false;
            }            
            
            matrix[i * cols + j] = '0';
            result = helper(matrix,rows,cols,str,i + 1,j,idx + 1) ||
                    helper(matrix,rows,cols,str,i - 1,j,idx + 1) ||
                    helper(matrix,rows,cols,str,i,j + 1,idx + 1) ||
                    helper(matrix,rows,cols,str,i,j - 1,idx + 1);            
            matrix[i * cols + j] = str[idx];
            return result;
        }
        bool hasPath(char* matrix, int rows, int cols, char* str){
            if(matrix == nullptr || rows <= 0 || cols <= 0 || str == nullptr){
                return false;
            }
            
            int idx = 0;
            for(int i = 0;i < rows;++i){
                for(int j = 0;j < cols;++j){
                    if(helper(matrix,rows,cols,str,i,j,idx)){
                        return true;
                    }
                }
            }
            return false;
        }
    
    };
     
  • 相关阅读:
    马赛克算法及iOS代码实现
    iOS制作Static Library(静态库),实现多工程的连编
    iOS由ImageIO.framework实现gif的系统解码
    KVC和KVO实现监听容器类(数组等)的变化
    Dynamicaly Typed(动态定型), Objective-C Runtime Programming
    Mac OSX下修改hosts文件
    MAC配置SVN服务器
    Encoding非常用编码转换
    Block作为参数使用
    UITextField关闭系统自动联想和首字母大写功能
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7530152.html
Copyright © 2011-2022 走看看