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

     

    看到之后觉得

    要么是回溯法,要么是深度优先搜索+剪枝

    写的回溯法,但是好像没太搞出来

    一个是怎么记录这种二维坐标,傻了,一开始还记录的是 int[][]的数组,其实直接记录i j两个参数就行

    二是怎么查重,一开始想着用hashset,但是二维的感觉不太好弄,其实可以把已经访问过的地方置空格,访问完后再置回正常值

    总体代码如下:

    class Solution {
        public boolean exist(char[][] board, String word) {
            char[] wordChar=word.toCharArray();
            for(int i=0;i<board.length;i++)
            {
                for(int j=0;j<board[0].length;j++)
                {
                    if(dfs(board,wordChar,i,j,0))
                    {return true;}
                }
            }
            return false;
    
        }
        public boolean dfs(char[][] board,char[] word,int i,int j,int index)
        {
            if(index==word.length)
            {return true;}//到底了
            if(i<0||j<0||i>board.length-1||j>board[0].length-1||board[i][j]!=word[index])
            {return false;}//超过界限或者不相等
            char flag=board[i][j];
            board[i][j]=' ';
            if(dfs(board,word,i+1,j,index+1)||dfs(board,word,i,j+1,index+1)||dfs(board,word,i-1,j,index+1)||dfs(board,word,i,j-1,index+1))
            {return true;}
            board[i][j]=flag;
            return false;
        }
    }

    感觉这种深度优先搜索+剪枝的题目还挺多的,有必要练一练

    然后这种和回溯法的区别在于什么呢

  • 相关阅读:
    Vue响应式原理
    vue 与 react
    vuex
    受控组件( controlled component )与不受控制的组件( uncontrolled component )区别
    redux学习语录
    Flux
    MVC和MVVM 架构模式/设计思想
    immutable
    JS中一些兼容性问题
    @芥末的糖 ---------- node连接数据库两种方式mysql和moogoDB
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14911663.html
Copyright © 2011-2022 走看看