题解 | #数组中相加和为0的三元组#

数组中相加和为0的三元组

http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

vector<vector<int> > ans;
vector<int> temp;
bool visit[9999]={false};
bool cmp(vector<int> a,vector<int> b){
    if(a[0]!=b[0])
        {
            return a[0]<b[0];
        }else if(a[1]!=b[1])
        {
            return a[1]<b[1];
        }else if(a[2]!=b[2])
        {
            return a[2]<b[2];
     }
    return true;
}
//C(5,3)=5x4x3/3x2x1=10 所有组合的情况,不考虑内部排序  A(5,3)=5x4x3=60   所有排序的情况,包含内部排序
//要实现C,不需要visit标记,只需要传递上次循环的位置+1作为下一个循环的起始
//要实现A,需要visit标记,每次循环都从0开始
class Solution {
public:
    void DFS(int dep,vector<int> num)
    {
        if(temp.size()==3)
        {   
            vector<int > tt;
            int all_sum=0;
            for(int i=0;i<temp.size();i++)
            {
                all_sum+=temp[i];
                tt.push_back(temp[i]);
            }
            if (all_sum!=0)
                return;
            sort(tt.begin(),tt.end());
            for(int i=0;i<ans.size();i++)
            {
                if(tt[0]==ans[i][0] && tt[1]==ans[i][1])
                    return ;
            }
            ans.push_back(tt);
            return ;
        }

        for(int i=dep;i<num.size();i++)
          {
             temp.push_back(num[i]);
             DFS(i+1,num);
             temp.pop_back();
          }
    }
    vector<vector<int> > threeSum(vector<int> &num) {
        
        DFS(0,num);
        sort(ans.begin(),ans.end(),cmp);
        return ans;
    }
};
全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
06-27 15:15
长安大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务