小李的伴学笔记3 | 豆包MarsCode AI刷题

46 阅读3分钟

226.小T的密码变换规则

问题描述

小T设计了一套密码变换规则,将输入的字符串转换成一串数字密码。变换规则如下:

  1. 小写字母按以下映射关系进行转换:
  • a, b, c -> 2
  • d, e, f -> 3
  • g, h, i -> 4
  • j, k, l -> 5
  • m, n, o -> 6
  • p, q, r, s -> 7
  • t, u, v -> 8
  • w, x, y, z -> 9
  1. 大写字母先转为小写字母,再跳到字母表中的前一个字母,并按上述规则转换为对应的数字。例如,B 转换为 a,再转换为 2A 特殊处理,先变为 Z,再转换为 9
  2. 非字母字符保持不变。

例如:对于输入字符串 "LIming0701",转换后的数字密码为 5464640701

解题思路

1.数据结构选择:

  • 使用 StringBuilder 来构建最终的输出字符串,因为 StringBuilder 在字符串拼接操作上比 String 更高效。
  • 使用 switch 语句来处理小写字母的映射,因为映射关系是固定的。
  • 使用 if-else 语句来处理大写字母的特殊转换逻辑。 2.算法步骤:
  1. 遍历输入字符串:对每个字符进行处理。

  2. 判断字符类型

    • 如果是小写字母,直接使用预定义的映射关系转换。
    • 如果是大写字母,先转为小写字母,再跳到字母表中的前一个字母,然后使用预定义的映射关系转换。
    • 如果是非字母字符,直接添加到结果中。
  3. 构建结果字符串:将处理后的字符依次添加到 StringBuilder 中。

  4. 返回结果:将 StringBuilder 转换为字符串并返回。

414.小U生活事件快乐值最大化

问题描述

小U喜欢分享她的日常生活。她有nn个事件可以选择分享,分享第ii个事件需要花费titi​的时间和hihi​的精力来编辑文章,并能够获得aiai​的快乐值。小U想知道,在总花费时间不超过TT且总花费精力不超过HH的前提下,她最多可以获得多少快乐值。

解题思路

1.数据结构选择:

  • 使用三维动态规划数组 dp[i][j][k],其中 i 表示前 i 个事件,j 表示当前总时间,k 表示当前总精力。

  • dp[i][j][k] 表示在前 i 个事件中,在总时间不超过 j 且总精力不超过 k 的情况下,能够获得的最大快乐值。 2.算法步骤:

  • 初始化:将 dp 数组初始化为 0。

  • 状态转移:

    • 对于每个事件 i,我们有两种选择:

      1. 不选择第 i 个事件:dp[i][j][k] = dp[i-1][j][k]
      2. 选择第 i 个事件:如果当前时间和精力足够(即 j >= t[i-1] 且 k >= h[i-1]),则 dp[i][j][k] = max(dp[i][j][k], dp[i-1][j-t[i-1]][k-h[i-1]] + a[i-1])
  • 最终结果:dp[n][T][H] 即为在总时间 T 和总精力 H 的限制下,能够获得的最大快乐值。

总结

在刷算法题的过程中,我总结了几个重要的知识点,并通过具体的例子进行了深入的梳理和分析。例如,二分查找算法用于在有序数组中高效地查找目标值;动态规划则擅长解决具有重叠子问题和最优子结构的问题,如背包问题;贪心算法适用于每一步都采取当前状态下最好选择的问题,如最小生成树。