微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此解决方案在给定的测试用例上提供TLE?

如何解决为什么此解决方案在给定的测试用例上提供TLE?

问题链接https://leetcode.com/problems/word-search/

给出2D板和一个单词,查找单词是否存在于网格中。

该单词可以由顺序相邻的单元格的字母构成,其中“相邻”单元格是水平或垂直相邻的单元格。同一字母单元不得重复使用。

我们不应两次使用一个字符。

示例:

board =
[
  ['A','B','C','E'],['S','F','S'],['A','D','E','E']
]

Given word = "ABCCED",return true.
Given word = "SEE",return true.
Given word = "ABCB",return false.

约束:

board and word consists only of lowercase and uppercase English letters.
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

我的逻辑: 在function存在时,每当我在2D数组中找到给定字符串(字符串s)的第一个字符时,我都会在其位置调用DFS,以检查字符串是否可以形成。

我在提到的测试用例上获得了冠军

测试用例:

[["a","a","a"],["a","b"]]
"aaaaaaaaaaaaaaaaaaaa"

预期输出

true

代码

class Solution {
public:
    
    bool dfs( vector<vector<char>> board,string s,int p,int i,int j ){

        if( p == s.length() ){
            return true;
        }
        
        if( i < 0 || i >= board.size() || j < 0 || j >= board[i].size() || board[i][j] != s.at(p) ){
            return false;
        }
        
        char t = board[i][j];
        board[i][j] = ' ';
        
        bool res = dfs( board,s,p + 1,i + 1,j ) | dfs( board,i - 1,j ) |
            dfs( board,i,j + 1 ) | dfs( board,j - 1 );
        
        board[i][j] = t;
        
        return res;
        
    }
    
    bool exist(vector<vector<char>>& board,string s) {
        
        for( int i = 0; i < board.size(); i++ ){
            for( int j = 0; j < board[0].size(); j++ ){
                if( board[i][j] == s.at(0) && dfs( board,j ) ){
                    return true;
                }
            }
        }
        return false;
    }
};

提交的详细信息:https://leetcode.com/submissions/detail/398643848/

解决方法

递归函数dfs按值接收电路板,即它在尝试时无法更改它。由于大量副本和无限递归而导致超时。看起来像虫子。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。