现在的位置: 首页 > 综合 > 正文

leetcode 第17-19题

2019年04月02日 ⁄ 综合 ⁄ 共 2021字 ⁄ 字号 评论关闭

4Sum:只需要在上一题的基础上外层在加一层遍历的循环即可

class Solution {
public:
     vector<vector<int> > fourSum(vector<int> &num, int target) {
        int len =num.size();
         
        vector <vector<int> >ans;
        ans.clear();
         //cout<<len<<endl;
        sort(num.begin(),num.end());
        for(int x=0;x<len;x++){
            if(x > 0 && num[x]==num[x-1])  
                     continue;
             for(int i=x+1;i<len;i++){
                if(i > x+1 && num[i]==num[i-1])  
                     continue; 
                     int k=len-1;
                 for(int j=i+1;j<k;){
                     if((j>i+1)&&num[j-1]==num[j]){j++;continue;}    
                     if(k<num.size()-1&& num[k]==num[k+1]){ 
                         k--;continue;
                     }
                     int sum=num[i]+num[j]+num[k]+num[x];
                     if(sum>target)k--;
                     else if(sum<target)j++;
                     else{
                        vector<int >s;
                        s.push_back(num[x]); 
                        s.push_back(num[i]); 
                        s.push_back(num[j]);
                        s.push_back(num[k]);
                        if(ans.empty()||ans[ans.size()-1][0]!=s[0]||ans[ans.size()-1][1]!=s[1]||ans[ans.size()-1][2]!=s[2])
                        ans.push_back(s);
                        j++;
                    }
                      
                 }
        
        
             }
    }
    return ans;

    }

Letter Combinations of a Phone Number

 使用递归的方式遍历即可

void myf(int len,string s,string t,vector< string > &ans){
    string ss[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    if(len==s.size()) {ans.push_back(t);return;}
    for(int i=0;i<ss[s[len]-'0'].size();i++){
        myf(len+1,s,t+ss[s[len]-'0'][i],ans);
    }
}
class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string>ans;
        if (digits.size()==0){ans.push_back("");return ans;}
        myf(0,digits,"",ans);
        return ans;
    }
};

removeNthFromEnd 设两个指针,距离N个节点,这样,就可以删除后一个节点的next即可,但是,这题需要注意,当节点数与要删除的数目等同时,要单独考虑,直接删去第一个元素即可。

class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
        ListNode *l=head;
        //if(head->next==NULL)head=NULL;
        ListNode *r=head;
        for(int i=0;i<n;i++){
            r=r->next;
        }
        if(r==NULL){head=head->next;return head;}
        while(r->next!=NULL){
            r=r->next;
            l=l->next;
        }
        l->next=l->next->next;
        return head;
    }
};

抱歉!评论已关闭.