首页 > 其他分享 >豆包AI刷题——数字分组求偶数和

豆包AI刷题——数字分组求偶数和

时间:2024-11-19 11:15:04浏览次数:3  
标签:digits index num backtrack AI int vector 豆包 刷题

判断核心:递归实现组合型枚举

1. 处理数据

将每个给定的数字拆分成单个的数字放到一个vector里面去,最后用一个大的vector包含所有的数字组

int solution(vector<int> numbers){
  vector<vector<int>> digits;
  for(int num : numbers){
    vector<int> groupdigits;
    while(num > 0){
      groupdigits.push_back(num % 10);
      num /= 10;
    }
    digits.push_back(groupdigits);
  }
}

2.实现递归函数

这里有一个很大的问题,就是我原本是把递归函数写在外面,总的方案数cnt定义成全局,然后在solution里面调用递归函数。这样做的话执行单个输出语句都是对的,但是这道题是一次性执行完所有的样例。

也就是说之前的cnt会一直存在并且影响后面的递归 

于是我们需要每一次调用solution都有一个单独的cnt和单独的递归调用

那么问题就来了,我们如何在一个函数内部定义一个可以执行的函数,并且让它能访问并修改到外部的变量呢?

function<void(int,int)> backtrack = [&](int index, int sum){

}
  •  function<void(int,int)> 是用来声明backtrack的类型
  • [&](int index, int sum):lambda表达式

lambda 表达式,用于定义一个匿名函数,这个匿名函数就是实际被赋值给 backtrack 的可调用对象内容
[&] 表示这个 lambda 表达式通过引用捕获外部作用域中的变量。也就是说,在 lambda 表达式内部可以直接访问和修改它所在的外部函数作用域里的变量

 贴一个完整代码:

#include <functional>
#include <iostream>
#include <vector>

using namespace std;

int solution(vector<int> numbers) {
    vector<vector<int>> digits;
    // Please write your code here
    for(int num : numbers){
        vector<int> groupDigits;
        while(num > 0){
            groupDigits.push_back(num%10);
            num /= 10;
        }
        digits.push_back(groupDigits);
    }

    int cnt = 0;

    function<void(int, int)> backtrack = [&](int index, int sum){
        //已经选到最后一个数字组了
        if(index == digits.size()){
            if(sum % 2 == 0){
                cnt++;
            }
            return;
        }

        //如果没有选到最后一个数字组就会执行以下代码

        //枚举每一个数字组里面的数字
        for(int digit : digits[index]){
            //到下一个数字组里面去选数字
            //这里枚举是包含每个数字都被选的情况
            backtrack(index+1, sum+digit);
        }
    };

    backtrack(0, 0);
    return cnt;
}

int main() {
    // You can add more test cases here
    cout << solution({123, 456, 789})<< endl;
    cout << solution({123456789})<< endl;
    cout << solution({14329, 7568}) << endl;
    return 0;
}

标签:digits,index,num,backtrack,AI,int,vector,豆包,刷题
From: https://blog.csdn.net/ixxoic/article/details/143876955

相关文章

  • 配置NVIDIA Container Runtime和容器运行GPUStack教程
    GPUStack是一个设计用于运行大模型的开源GPU集群管理器,提供私有部署的大模型服务,支持大语言模型、Embedding文本嵌入模型、Reranker重排序模型、Vision多模态模型等各种模型。它可以聚合不同平台(如AppleMacbook、WindowsPC和Linux服务器)的GPU,构建一个统一的异构GPU......
  • 配置NVIDIA Container Runtime和容器运行GPUStack教程
    GPUStack是一个设计用于运行大模型的开源GPU集群管理器,提供私有部署的大模型服务,支持大语言模型、Embedding文本嵌入模型、Reranker重排序模型、Vision多模态模型等各种模型。它可以聚合不同平台(如AppleMacbook、WindowsPC和Linux服务器)的GPU,构建一个统一的异构GPU......
  • late chunking 源码分析-https://github.com/jina-ai/late-chunking
    importbisectimportloggingfromtypingimportDict,List,Optional,Tuple,Unionfromllama_index.core.node_parserimportSemanticSplitterNodeParserfromllama_index.core.schemaimportDocumentfromllama_index.embeddings.huggingfaceimportHugging......
  • Gmail企业邮箱:定制化邮件域名打造形象!
    gmail企业邮箱的注意事项?如何创建烽火域名邮箱地址?一个专业、可信赖的企业形象不仅能够提升客户的好感度,还能增强员工的归属感和自豪感。而Gmail企业邮箱,作为企业通讯的重要工具。烽火将介绍如何通过定制化邮件域名来打造独特的品牌形象。Gmail企业邮箱:增强品牌Gmail企业邮......
  • 设计低准确率AI产品
    模型的准确率往往是非常不稳定的,有些测试能表现得很好,而有些测试就完全不行。如果一个模型的成功率只有60%,而不是99%,那它还能做什么?这时候还是可以做的,关键是你得为此做好设计,以确保产品仍能为用户带来价值,同时避免因错误结果而引起的不良后果。以下是一些策略和建议,帮助您在......
  • Rust impl关键字(实现封装、继承和多态等功能)(Rust关联类型、impl关联类型、Rust静态方
    文章目录Rust中的`impl`关键字详解什么是`impl`关键字?`impl`的基本语法示例:为结构体实现方法`impl`与特征(Trait)(为类型实现通用接口)示例:为类型实现特征`impl`与关联类型(关联类型使得在特征中定义的一些类型可以在实现时具体化)示例:使用关联类型`impl`与静态方法(不带self......
  • 全面掌握AI大模型:从理论到实践的完整学习路线,看这篇就够了
    一、初聊大模型1、什么是大模型?大模型,通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑,这些大脑通过阅读大量的文本、图片、声音等信息,学习到了世界的知识。这些大脑(模型)非常大,有的甚至有几千亿个参数,这些参数就像是大脑中的神经元,它们通过......
  • AI 大模型催生的新职业,提示词工程师是什么?
    全方位解析“提示词工程师”。‍AI大模型技术正以前所未有的速度重塑我们的未来。它们不仅仅是冷冰冰的算法集合,更是拥有无限创造力的智能体。而在这个智能体的背后,有一群关键的角色——提示词工程师(PromptEngineer)。顾名思义,这类人是专门负责设计和优化AI大模型的提......
  • 普通人如何抓住AI这个风口?不用怕,推荐适合零基础人员的详细AI学习路线
    普通人如何抓住AI这个风口?有热心网友评论:我觉得抓住任何风口的前提是知道这是个风口,这个风口吹在哪里?你现在具备什么能力?可以说chatgpt吹到了每个行业。对于学生:openai有海量的数据库供你学习,相对贫瘠的书本知识,变成了专人专职老师;对于作者:你需要使用你的创意和框架去......
  • 不能用AI解决的RSA题目
    RSA基础e,n是公开钥匙d是私用钥匙c是密文m是明文(包含flag)n=pqd=invert(e,(p-1)(q-1))m=pow(c,d,n)#解密flag=long_to_bytes(m)#转文字1、相邻素数q=gmpy2.next_prime(p)p和q挨得很近解题代码:fromCrypto.Util.numberimport*fromgmpy2......