LeetCode #17 Letter Combinations of a Phone Number

来源:互联网 发布:2kol怎么显示数据 编辑:程序博客网 时间:2024/05/29 18:19

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 exampleInput: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;     }};
0 0
原创粉丝点击