《慕课网玩转算法面试》笔记及习题解答8.1~8.3
2017-09-15 18:20
791 查看
LeetCode 17. Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
思路:采用回溯法,当当前是string长度等于digits长度时,则找到了一个满足条件的string
LeetCode 93
有点难,暂时不会做。。
LeetCode 131
思路:使用回溯法,对于每个能构成回文的字串放入数组,后半部分递归,递归结束后进行回溯
class Solution {
private:
bool isPalindrome(string s)
{
int i = 0, j = s.length()-1;
while(i < j){
if(s[i]!=s[j])
return false;
i++;
j--;
}
return true;
}
void findPartition(const string& s, const int& start , vector<string>& p, vector<vector<string>>& res){
if(start == s.length()){
res.push_back(p);
return;
}
for(int i = start+1; i <= s.length(); i++){
//如果s[start,i)是回文,将s[start,i)放入数组中,后半部分递归
if( isPalindrome(s.substr(start,i-start)) ){
p.push_back(s.substr(start,i-start));
findPartition(s, i, p, res);
//注意递归结束后要进行回溯操作
p.pop_back();
}
}
return;
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
if(s.empty())
return res;
vector<string> p;
findPartition(s, 0, p,res);
return res;
}
};
LeetCode 46
Given a
a43a
collection of distinct numbers, return all possible permutations.
For example,
思路:回溯法寻找,设置一个bool数组来判断是否包含,注意终止条件,递归结束后需要将bool数组修改来保证回溯
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路:采用回溯法,当当前是string长度等于digits长度时,则找到了一个满足条件的string
class Solution { private: const string record[10] = {" ","" ,"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; void findCombinations(const string& digits, const int& index, string s, vector<string>& res){ //找到了一个满足条件的s if( index == digits.length() ){ res.push_back(s); return; } char c = digits[index]; string letters = record[c - '0']; for(int i = 0; i < letters.length(); i++){ findCombinations( digits, index + 1, s + letters[i] , res ); } return; } public: vector<string> letterCombinations(string digits) { vector<string> res; if(digits =="") return res; findCombinations(digits, 0, "", res); return res; } };
LeetCode 93
有点难,暂时不会做。。
LeetCode 131
思路:使用回溯法,对于每个能构成回文的字串放入数组,后半部分递归,递归结束后进行回溯
class Solution {
private:
bool isPalindrome(string s)
{
int i = 0, j = s.length()-1;
while(i < j){
if(s[i]!=s[j])
return false;
i++;
j--;
}
return true;
}
void findPartition(const string& s, const int& start , vector<string>& p, vector<vector<string>>& res){
if(start == s.length()){
res.push_back(p);
return;
}
for(int i = start+1; i <= s.length(); i++){
//如果s[start,i)是回文,将s[start,i)放入数组中,后半部分递归
if( isPalindrome(s.substr(start,i-start)) ){
p.push_back(s.substr(start,i-start));
findPartition(s, i, p, res);
//注意递归结束后要进行回溯操作
p.pop_back();
}
}
return;
}
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> res;
if(s.empty())
return res;
vector<string> p;
findPartition(s, 0, p,res);
return res;
}
};
LeetCode 46
Given a
a43a
collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
思路:回溯法寻找,设置一个bool数组来判断是否包含,注意终止条件,递归结束后需要将bool数组修改来保证回溯
class Solution { private: vector<bool> isUsed; void findPermute(const vector<int>& nums, int index, vector<int>& num, vector<vector<int>>& res) { //找到一个满足条件的数组的终止条件 if(num.size() == nums.size()) { res.push_back(num); return; } for(int i = 0; i< nums.size(); i++){ if(!isUsed[i]){ num.push_back(nums[i]); isUsed[i] = true; findPermute(nums, index+1, num, res); //注意,递归结束时是已经找到了一个包含nums[index]的数组,要重新寻找新数组,此时要将nums[i] pop并且将isUesd[i]设置成false num.pop_back(); isUsed[i] = false; } } return; } public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; if(nums.empty()) return res; isUsed = vector<bool>(nums.size(),false); vector<int> num; findPermute(nums, 0, num, res); return res; } };
相关文章推荐
- 《慕课网玩转算法面试》笔记及习题解答9.8
- 《慕课网玩转算法面试》笔记及习题解答5.1.~5.3
- 《慕课网玩转算法面试》笔记及习题解答5.4.~5.6
- 《慕课网玩转算法面试》笔记及习题解答3.5~3.6
- 《慕课网玩转算法面试》笔记及习题解答6.4.~6.6
- 《慕课网玩转算法面试》笔记及习题解答2
- 《慕课网玩转算法面试》笔记及习题解答9.3
- 《慕课网玩转算法面试》笔记及习题解答6.7
- 《慕课网玩转算法面试》笔记及习题解答8.4~8.5
- 《慕课网玩转算法面试》笔记及习题解答9.4
- 《慕课网玩转算法面试》笔记及习题解答7.4~7.6
- 《慕课网玩转算法面试》笔记及习题解答3.1 ~3.4
- 《慕课网玩转算法面试》笔记及习题解答1
- 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)
- 算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答
- 算法笔记_109:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答
- 前端跳槽面试技巧(慕课网)笔记二:算法类
- 算法笔记_110:第四届蓝桥杯软件类省赛真题(JAVA软件开发高职高专组部分习题)试题解答