前言 大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎!本章主要内容面向接触过C++的老铁,下面是收纳的一些例题与解析~ 主要内容含:
class Solution
{
public:
int singleNumber(vector<int>& nums)
{
int value = 0;
for(auto e : v)
{
value ^= e;
}
return value;
}
};
// 涉及resize / operator[]
// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
class Solution
{
public:
vector<vector<int>> generate(int numRows)//传入的参数表示要求杨辉三角的行数
{
vector<vector<int>> vv(numRows);//初始化每一行所有元素都为“1”
for(int i = 0; i < numRows; ++i)
{
vv[i].resize(i+1, 1);
}
for(int i = 2; i < numRows; ++i)//根据杨辉三角特性调整中间元素
{
for(int j = 1; j < i; ++j)
{
vv[i][j] = vv[i-1][j] + vv[i-1][j-1];
}
}
return vv;
}
};
string strA[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
// 输入的数字组合 当前层次 结合后的新字符串 存储所有的全排列组合
void Combine(string digits, int level, string combineStr, vector<string&> v)
{
if (level == digits.size()) //递归后得到的字串的元素个数与层数是相同的
{
v.push_back(combineStr);//当到最后一层的时候,将新字符串尾插进vector中
return;
}
int num = digits[level] - '0';//将字符类转换成整型
string str = strA[num];//访问对应“电话按键”strA中的字符串
for (size_t i = 0; i < str.size(); ++i) //每一层都要涉及到多路递归,于是我们要根据层数进行for循环
{
Combine(digits, level + 1, combineStr + str[i], v);
}
}