青训营题目解答与心得

76 阅读3分钟
  • 题目解析:
  • 题目内容:小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 numbers: 一个由多个整数字符串组成的列表,每个字符串可以视为一个数字组。小M需要从每个数字组中选择一个数字。例如对于[123, 456, 789],14个符合条件的数为:147 149 158 167 169 248 257 259 268 347 349 358 367 369
  • 思路: 关键点: 每个数字组中的数字可以是 1 到 9。 新数的各位数字之和为偶数的条件是:奇数个奇数和偶数个偶数的组合
  • 图解:
graph TD
 统计每个数字组中的奇数和偶数 --> 遍历每个数字组统计其中的奇数和偶数数量 --> 动态规划或回溯法 
  • 代码详解;
  • 知识总结:
    • 动态规划或回溯法: 使用动态规划或回溯法来计算所有可能的选择方法。 定义一个递归函数,参数包括当前处理的数字组索引、当前选择的数字之和的奇偶性。 递归终止条件:当处理完所有数字组时,检查当前选择的数字之和是否为偶数。 递归过程中,遍历当前数字组中的每个数字,更新当前选择的数字之和的奇偶性,并递归处理下一个数字组。
    • 奇偶性的应用: 通过奇偶性来判断和控制数字之和的性质,这是一种常见的数学技巧。
    • 回溯法: 回溯法是一种通过尝试所有可能的解决方案来解决问题的方法,适用于组合问题和搜索问题。
    • 动态规划: 动态规划可以用于优化回溯法,通过存储中间结果来避免重复计算,提高效率。
    • 字符串处理: 处理字符串中的数字,统计奇数和偶数,这是编程中常见的字符串操作。
    • 递归: 递归是一种强大的编程技巧,可以用来解决复杂的问题,但需要注意递归深度和性能问题。但是这个题目可能没有太使用到,但是在解决这个问题的时候有了解过这个方法。其他题目也可以使用这个方法。
  • 学习计划:每天固定一个时间使用豆包MarsCode AI刷题,难度可以随着学习时间的增加而增加,每次解决一个算法问题会产生成就感,每天学一点,针对自己不太熟悉的方面可以深入的学习。

  • 工具运用:使用AI刷题可以在自己编码的同时打开旁边的AI栏有什么疑惑的可以问AI或者让AI帮你生成一些需要的功能,问题肯能就会迎刃而解了。但是最好不要直接让AI生成整道题的解答,要先自己思考否则可能你自己的思路可能会被AI生成的内容干扰。所以我们要善于利用AI来学习。和AI对话的话术也要注意了,尽量的详细并且要尽量的专业。