DAY25.

回溯模板

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

77. 组合  

第一道回溯,想到了回溯树,但具体怎么转化为回溯还是看了教程

1.想出一个树的思维导图

第一个数的选项        1                                        2                                3...

第二个数的选项        2        3        4...                 2        3        4...        2        3        4...

....

2.for横向遍历        递归纵向遍历

剪枝!!!

每个for如果还需要3个元素 那n-3+1之后的遍历都不需要,因为凑不够三个,但原代码仍然执行只是不return

for(int a=startindex;a<=n-(k-tmp.size())+1;a++)

 216.组合总和III 

回忆模板写很好写,剪枝也想出来了(一个是for里面的一个是一但大于targetsum就返回)

但for里面有两种剪枝,
一种是我的i<targetsum-sum
一种是和前一题一样的
9 - (k - path.size()) + 1
感觉两种取个min好一点

 17.电话号码的字母组合 

用一个map完成数字和字母之间的转换!(lettermap是起的名字,const也可以去掉)

const string letterMap[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };

依然是按照backtracking的模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值