leetcode79丨单词搜索
这是一道简单的回溯题,正常dfs就能A,但是我做的时候内存爆了,从而发现了一个以前一直没发现的问题。
之前我只有需要对实参进行修改才会在定义函数时使用引用传递。这道题因为不用对字母表进行修改,所以我一开始直接传值:
1 | bool dfs(vector<vector<char>> a,string word,int n,int x,int y) // a为字母表,n为当前匹配长度,x、y为当前字母坐标 |
然后内存爆了。因为回溯题的数组一般都比较小,就算把整个数组直接传进去空间复杂度也才乘100左右,以前直接这样传内存一直没有爆过。以后递归的时候不能再这样传参了,太占空间了。
下面附上此题代码。
1 | bool visit[16][16]={}; // 记录各字母是否被访问过 |
这样就A了,就没有再剪枝了。。