代码随想录刷题 Day28

news/2024/7/24 1:42:18 标签: 算法

216.组合总和III

和前一个题一样,照着自己就能写出来,就多了一个判断结果是不是等于n的逻辑。有两个地方可以剪纸,一个是当和已经大于要找的时候直接返回,另一个是当剩余元素少于三个的时候直接返回(第一层递归是少于三个, 第二层递归是少于两个)

class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    int sum = 0;
    void traversal(int k, int n, int start_index) {
        if (path.size() == k) {
             if (sum == n) {
                result.push_back(path);
                return;
            }
        }

        for (int i = start_index; i <= 9; i++) {
            path.push_back(i);
            sum +=i;
            traversal(k, n, i + 1);
            path.pop_back();
            sum -=i;
        }
    }

    vector<vector<int>> combinationSum3(int k, int n) {
        traversal(k,n,1);
        return result;
    }
};

 17. Letter Combinations of a Phone Number

注意下string的用法。比如定义string s可以对s做 s[]操作

class Solution {
public:
       const string letterMap[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };
    
    vector<string> result; //这个用来存总共的结果集
    string s; //这个用来存单个的结果集

    void backtracking(const string& digits, int index){ //这个二叉树的深度就是index的个数,宽度就是三个字母
        if (index == digits.size()) {
            result.push_back(s);
            return;
        }
        int digit = digits[index] - '0'; //假如是“23”,这里就取出来了2,因为主函数一开始的index是0就是这个字符串第一个数
        string letters = letterMap[digit]; //这句写不出来;
        for (int i = 0; i < letters.size(); i++ ) {
            s.push_back(letters[i]);
            backtracking(digits, index + 1);
            //s.pop_back(letters[i]); 这句写错了
            s.pop_back();
        }
  }

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


http://www.niftyadmin.cn/n/5065357.html

相关文章

有效括号相关

相关题目 20. 有效的括号 921. 使括号有效的最少添加 1541. 平衡括号字符串的最少插入次数 32. 最长有效括号 # 20. 有效的括号 class Solution:def isValid(self, s: str) -> bool:stack []for pare in s:if pare in ([{:stack.append(pare)if not stack or (pare ) and…

【教程】Autojs使用OpenCV进行SIFT/BRISK等算法进行图像匹配

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 此代码可以替代内置的images.findImage函数使用&#xff0c;但可能会误匹配&#xff0c;如果是对匹配结果要求比较高的&#xff0c;还是得谨慎使用。 runtime.images.initOpenCvIfNeeded(); importClass(java.uti…

WebGPU 入门:绘制一个三角形

大家好&#xff0c;我是前端西瓜哥。 今天我们来入门 WebGPU&#xff0c;来写一个图形版本的 Hello World&#xff0c;即绘制一个三角形。 WebGPU 是什么&#xff1f; WebGPU 是一个正在开发中的潜在 Web 标准和 JavaScript API&#xff0c;目标是提供 “现代化的 3D 图形和计…

基础-MVP图像处理-图像运算算子

图像运算可以对两张图像相同坐标像素的灰度值进行运算&#xff0c;然后得到新的的图像。 配置参数&#xff1a; 运算类型&#xff1a;求和、求差、求最值、位运算 操作方法&#xff1a;影响结果输出的形式&#xff0c; 一、求和、求差运算时&#xff1a; 截断&#xff1a;根据…

JAVA 泛型、序列化和复制

泛型提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法&#xff0c;能够对整型数组、字符串数组甚至其他任何类型的数组进行排序&a…

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识&#xff0c;起步是晚了一点&#xff0c;但好歹是开了个头。下面就借助TransFusion论文…

双端队列--二叉树 Z 字层序遍历

力扣103题----二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 代码&#xff1a; public L…

树的存储结构以及树,二叉树,森林之间的转换

目录 1.双亲表示法 2.孩子链表 3.孩子兄弟表示法 4.树与二叉树的转换 &#xff08;1&#xff09;树转换为二叉树 &#xff08;2&#xff09;二叉树转换成树 5.二叉树与森林的转化 &#xff08;1&#xff09;森林转换为二叉树 以下树为例 1.双亲表示法 双亲表示法定义了…