题解 | #求和#

求和

http://www.nowcoder.com/practice/11cc498832db489786f8a03c3b67d02c

  1. 这是求和得常用DFS回溯套路
#include<bits/stdc++.h>
using namespace std;

void dfs(vector<vector<int>>& ans, vector<int> &res,int index, int sum, int target,int end){

    //base case
    if(sum==target){
        for(int i=0;i<res.size()-1;i++){
            cout<<res[i]<<" ";
        }
        cout<<res[res.size()-1]<<endl;
        return;
    }


    for(int i = index; i<=end && sum+i <= target;i++){ //sum+i<=m剪枝
        res.push_back(i);
        dfs(ans,res, i + 1 , sum+i ,target,end);
        res.pop_back();//回溯
    }



}



int main(){
    int n,m;

    while(cin>>n>>m){

        vector<vector<int>> ans;
        vector<int> res;

        dfs(ans,res,1,0,m,n);
        res.clear();


    }


    return 0;
}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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