题解 | #加起来和为目标值的组合(三)#

加起来和为目标值的组合(三)

https://www.nowcoder.com/practice/8c297161a58740c5b92b3e184dd1756e

采用回溯算法,在回溯的过程中,使用辅助变量记录总和,并利用组合的长度和总和的值进行剪枝,对满足要求的组合记录在ArrayList res中。

import java.util.*;
public class Solution {
    ArrayList> res = new ArrayList();
    ArrayList track = new ArrayList();
    int sum = 0;
    public int[][] combination (int k, int n) {
        backtrack(1,k,n);
        int[][] resArr = new int[res.size()][k];
        for(int i = 0;i<res.size();i++){
            for(int j = 0;j<k;j++){
                resArr[i][j] = res.get(i).get(j);
            }
        }
        return resArr;
    }
    private void backtrack(int start,int k, int n){
        if(track.size() == k && sum == n){
            res.add(new ArrayList(track));
        }
        if(track.size() > k || sum > n){
            return;
        }
        for(int i = start;i<10;i++){
            sum += i;
            track.add(i);
            backtrack(i+1,k,n);
            sum -= i;
            track.remove(track.size()-1);
        }
    }
}
全部评论

相关推荐

06-15 18:44
黄淮学院 Java
Lynn012:如果是居民楼还是算了吧,看着有点野呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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