Description
Given a digit string, return all possible letter combinations that the number could represent.
1 and 0 represent “”, 2 = “abc”, 3 = “edf”, 4 = “ghi”, 5 = “jkl”, 6 = “mno”, 7 = “pqrs”, 8 = “tuv”, 9 = “wxyz”;
For example
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Analysis
题目难度为:Medium
本题难度很低,只需要按照题目要求来做就行。我们有一个res的vector来存储结果,如果输入的是2,那就分别取是”abc”,我们取’b’加在res所有元素的后面,组成新的元素,放入res的末尾,同理取’c’,我们把res的所有元素的末尾都加上’a’
Code(c++)
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> total;
int n = nums.size();
if(n<4) return total;
sort(nums.begin(),nums.end());
for(int i=0;i<n-3;i++)
{
if(i>0&&nums[i]==nums[i-1]) continue;
if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target) break;
if(nums[i]+nums[n-3]+nums[n-2]+nums[n-1]<target) continue;
for(int j=i+1;j<n-2;j++)
{
if(j>i+1&&nums[j]==nums[j-1]) continue;
if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target) break;
if(nums[i]+nums[j]+nums[n-2]+nums[n-1]<target) continue;
int left=j+1,right=n-1;
while(left<right){
int sum=nums[left]+nums[right]+nums[i]+nums[j];
if(sum<target) left++;
else if(sum>target) right--;
else{
total.push_back(vector<int>{nums[i],nums[j],nums[left],nums[right]});
do{left++;}while(nums[left]==nums[left-1]&&left<right);
do{right--;}while(nums[right]==nums[right+1]&&left<right);
}
}
}
}
return total;
}
};