一、只出现一次的数字
1、题目讲解
2、思路讲解
3、代码实现
class Solution { public: int singleNumber(vector<int>& nums) { int ret=0; for(auto& ch:nums) { ret^=ch; } return ret; } };
二、杨辉三角
1、题目讲解
2、思路讲解
3、代码实现
class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; vv.resize(numRows); for(int i=0;i<vv.size();i++) { vv[i].resize(i+1); vv[i][0]=vv[i][vv[i].size()-1]=1; } for(int i=0;i<vv.size();i++) { for(int j=0;j<vv[i].size();j++) { if(vv[i][j]==0) { vv[i][j]=vv[i-1][j-1]+vv[i-1][j]; } } } return vv; } };
三、删除有序数组中的重复项
1、题目讲解
2、思路讲解
3、代码实现
class Solution { public: int removeDuplicates(vector<int>& nums) { int n=0; for(int i=0;i<nums.size();i++) { if(nums[i]!=nums[n]) { nums[++n]=nums[i]; } } return n+1; } };
四、电话号码的字母结合
1、题目讲解
2、思路讲解
部分递归展开图
3、代码实现
class Solution { public: const char* arr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; void Combina(const string& digits,int i,string str,vector<string>& ret) { if(i==digits.size()) { ret.push_back(str); return; } int m=digits[i]-'0'; string s1=arr[m]; for(auto ch:s1) { Combina(digits,i+1,str+ch,ret); } } vector<string> letterCombinations(const string& digits) { vector<string> ret; if(digits.empty()) return ret; string str; Combina(digits,0,str,ret); return ret; } };