leetcode 面试题 17.22. 单词转换(DFS+回溯)

  • 题目描述
  • 思路分析
    这题回溯,先想出它的空间解是什么,这里空间解,其实就是给的原字符串到结束字符串中间的变形过程,那么就可以容易的画出一个解空间树,用深度搜索进行搜索,
    剪枝后,进入下一个维度,再进行搜索,最后到达出口即得到结束字符串时,将结果返回,放下脚本
class Solution {
public:
    bool judge(string& a,string& b)
    {
        if(a.size()!=b.size()) return false;
        int count=0;
        for(int i=0;i<a.size();i++)
        {
            if(a[i]!=b[i])
            {
                count++;
            }
        }
        return count==1;
    }
    bool findres(string &curWord,string& endWord,vector<string>& wordList,vector<bool> &visit,vector<string>& result)
    {
        if(curWord==endWord) return true;
        for(int i=0;i<wordList.size();i++)
        {
            if(visit[i]||!judge(curWord,wordList[i])) continue;
            visit[i]=true;
            result.push_back(wordList[i]);
            if(findres(wordList[i],endWord,wordList,visit,result)) return true;
            result.pop_back();
        }
        return false;

    }
    vector<string> findLadders(string beginWord, string endWord, vector<string>& wordList) {
        vector<string> result={beginWord};
        vector<bool> visit(wordList.size(),false);
        if(findres(beginWord,endWord,wordList,visit,result))
        {
            return result;
        }
        return vector<string>();
            
    }
};

回溯法学习链接:https://blog.csdn.net/shinanhualiu/article/details/52016481

posted @ 2021-01-27 13:48  YenKoc  阅读(137)  评论(0编辑  收藏  举报