• 第79题:单词搜索


    一. 问题描述

    给定一个二维网格和一个单词,找出该单词是否存在于网格中。

    单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

    示例:

    board =

    [

      ['A','B','C','E'],

      ['S','F','C','S'],

      ['A','D','E','E']

    ]

    给定 word = "ABCCED", 返回 true.

    给定 word = "SEE", 返回 true.

    给定 word = "ABCB", 返回 false.

    二. 解题思路

    解题思路:本题采用回溯算法进行求解,递归函数(已经存储的字符串haveword,已经存储的最后一位的定位横坐标X,纵坐标y,标记后的整个数组board,目标值word)

    步骤一:判断当前数值是否等于目标。是:返回true,不是,继续递归。

    步骤二:对进行存储的数值要进行标记为1,防止重复使用。

    三. 执行结果

    执行用时 :47 ms, 在所有 java 提交中击败了9.38%的用户

    内存消耗 :39.2 MB, 在所有 java 提交中击败了95.96%的用户

    四. Java代码

    class Solution {
        public boolean exist(char[][] board, String word) {
            for(int i=0;i<board.length;i++)
                    for(int j=0;j<board[0].length;j++)
                    {
                        if(board[i][j]==word.charAt(0))
                        {
                            String haveword=board[i][j]+"";
                            int x=i;
                            int y=j;
                            
                            char[][] aboard=new char[board.length][board[0].length];
                            for(int m=0;m<board.length;m++)
                                System.arraycopy(board[m], 0, aboard[m], 0, board[m].length);
                            aboard[x][y]='1';
                            boolean result=com(haveword,x,y,aboard,word);
                            if(result==true)
                            {
                                return true;
                            }
                            
                        }
                    }
                
                return false;
        }
        
       public boolean com(String haveword, int x, int y,char[][] board,String word) {
            if(haveword.equals(word))
            {
                return true;
            }
            if(x-1>=0&&board[x-1][y]==word.charAt(haveword.length()))
            {
                String ahaveword=haveword+board[x-1][y];
                int x1=x-1;
                char[][] aboard=new char[board.length][board[0].length];
                for(int m=0;m<board.length;m++)
                    System.arraycopy(board[m], 0, aboard[m], 0, board[m].length);
                aboard[x1][y]='1';
                boolean qa=com(ahaveword,x1,y,aboard,word);
                if(qa==true)
                return qa;
            }
            if(x+1<board.length&&board[x+1][y]==word.charAt(haveword.length()))
            {
                String ahaveword=haveword+board[x+1][y];
                int x1=x+1;
                char[][] aboard=new char[board.length][board[0].length];
                for(int m=0;m<board.length;m++)
                    System.arraycopy(board[m], 0, aboard[m], 0, board[m].length);
                aboard[x1][y]='1';
                boolean qa=com(ahaveword,x1,y,aboard,word);
                if(qa==true)
                return qa;
            }
            if(y-1>=0&&board[x][y-1]==word.charAt(haveword.length()))
            {
                String ahaveword=haveword+board[x][y-1];
                int y1=y-1;
                char[][] aboard=new char[board.length][board[0].length];
                for(int m=0;m<board.length;m++)
                    System.arraycopy(board[m], 0, aboard[m], 0, board[m].length);
                aboard[x][y1]='1';
                boolean qa=com(ahaveword,x,y1,aboard,word);
                if(qa==true)
                return qa;
                
            }
            if(board[0].length>0&&y+1<board[0].length&&board[x][y+1]==word.charAt(haveword.length()))
            {
                String ahaveword=haveword+board[x][y+1];
                int y1=y+1;
                char[][] aboard=new char[board.length][board[0].length];
                for(int m=0;m<board.length;m++)
                    System.arraycopy(board[m], 0, aboard[m], 0, board[m].length);
                aboard[x][y1]='1';
                boolean qa=com(ahaveword,x,y1,aboard,word);
                if(qa==true)
                return qa;
                
            }
            return false;
            
        }
        
    }
  • 相关阅读:
    支持向量机通俗导论(理解SVM的三层境地)
    ComponentName的意思
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    TraceView总结
    Redis:百科
    Redis:目录
    Redis: temple
    软件-操作系统-服务器:Nginx(engine X)
    软件-数学软件:Maple
    软件-数学软件:Mathematica
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11725368.html
Copyright © 2020-2023  润新知