当前位置: 首页 > article >正文

刷题分享11_30

刷题分享

1.(力扣216)这是一道回溯算法的经典题目。对于回溯算法,一般backtracking是没有返回值的,参数也比较不固定,需要根据每个题的特点来具体分析。这道题因为不能取到重复元素,所以需要额外加一个参数startindex,用来记录每一次开始时所应该取到的元素。在循环内部,一般的逻辑是(单层操作 + 递归 + 回溯),其实回溯的本质就是在递归处理完该层向下的层后,将该层恢复成一开始达到该层时的状态,以便向上返回进行别的分支。所以也叫(恢复现场)

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backtracking(int k, int exnum, int sum, int startindex) {
        if (sum == exnum && k == path.size()) {
            res.push_back(path);
            return;
        }
        for (int i = startindex; i <= 9; i++) {
            sum += i;
            path.push_back(i);
            backtracking(k, exnum, sum, i + 1);
            sum -= i;
            path.pop_back();
        }
    }

    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k, n, 0, 1);
        return res;
    }
};

2.(力扣17)首先该题要先使用一个数组,来存放对应位置上的字符串,另外,该题中有一个特殊的参数index,是用来标记现在已经处理到了输入字符串中的哪一个,所以结束条件是(index==digits.size())变量digit是用来存放当前这一层所要操作的字符串的

class Solution {
public:
    vector<string> res;
    string path;
    string help[10]{"",    "",    "abc",  "def", "ghi",
                    "jkl", "mno", "pqrs", "tuv", "wxyz"};

    void backtracking(string& digits, int index) {
        if (index == digits.size()) {
            res.push_back(path);
            return;
        }
        string digit = help[digits[index] - '0'];
        for (int i = 0; i < digit.size(); i++) {
            path.push_back(digit[i]);
            backtracking(digits, index + 1);
            path.pop_back();
        }
    }

    vector<string> letterCombinations(string digits) {
        if (digits.size() == 0) {
            return res;
        }
        backtracking(digits, 0);
        return res;
    }
};


http://www.kler.cn/a/417455.html

相关文章:

  • Python爬虫-如何正确解决起点中文网的无限debugger
  • ES6 变量解构赋值总结
  • 新型智慧城市建设方案-1
  • 大语言模型轻量化:知识蒸馏的范式迁移与工程实践
  • 自指学习:AGI的元认知突破
  • 配置@别名路径,把@/ 解析为 src/
  • 模拟器快速上手,助力HarmonyOS应用/服务高效开发
  • IEEE 802.11s wifi mesh网络
  • Linux kernel 堆溢出利用方法(三)
  • 图卷积网络GCN与图注意力网络GAT原理详解
  • Vue.js 中 v-bind 和 v-model 的用法与异同
  • 力扣-位运算-8【算法学习day.48】
  • Scala的字符串
  • 图书馆管理系统设计思路
  • 使用异步编程提升Python网络请求性能
  • Figma入门-原型交互
  • [windows] [C++] 由变量命名引起的血案
  • Stable Diffusion 3详解
  • oracle 用户手册
  • Android电视项目焦点跨层级流转
  • CodeIgniter 如何加载多个帮助文件
  • 241130_MindNLP学习记录
  • 【大语言模型】ACL2024论文-22 大型语言模型中的自信心:探究大型语言模型生成回答的自信心与概率一致性
  • C_字符串的一些函数
  • 算法编程题-颜色交替的最短路径
  • Vue.js 组件开发:进阶技巧与最佳实践