1. StrStr
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从 0 开始)。如果不存在,则返回 -1。
思路:核心点遍历给定字符串字符,判断以当前字符开头字符串是否等于目标字符串
答案代码
int strStr(string haystack, string needle) {
int n = haystack.size();
int m = needle.size();
int j=0;
for(int i=0;i<=(n-m);i++)
{
for(j=0;j<m;j++)
{
if(haystack[i+j]!=needle[j])
break;
}
if(j==m)
{
return i;
}
}
return -1;
}2. Subsets
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
思路:这是一个典型的应用回溯法的题目,简单来说就是穷尽所有可能性,算法模板如下
result = []
func backtrack(选择列表,路径):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(选择列表,路径)
撤销选择答案代码
vector<vector<int>> subsets(vector<int>& nums) {
// 保存最终结果
vector<vector<int> > res;
// 保存中间结果
vector<int> li;
backtrack(nums,0,li,res);
return res;
}
// nums 给定的集合
// pos 下次添加到集合中的元素位置索引
// li 临时结果集合(每次需要复制保存)
// res 最终结果
void backtrack(vector<int>& nums, int pos, vector<int> li,vector<vector<int> >& res)
{
// 把临时结果保存到最终结果
res.push_back(li);
// 选择、处理结果、再撤销选择
for(int i=pos;i<nums.size();i++)
{
li.push_back(nums[i]);
backtrack(nums, i+1, li, res);
li.pop_back();
}
}
京公网安备 11010502036488号