LeetCode每日一题:3754. 连接非零数字并乘以其数字和 I 的详细解析与代码实现

大家好!今天我们来看一道有趣的算法题目——LeetCode 3754“连接非零数字并乘以其数字和 I”。这道题看似简单,但实则考察了我们对数字操作的细致处理能力。如果你正在准备面试或者想锻炼一下编程思维,那可千万别错过哦!

题目分析

首先,我们来理解一下题目到底在说什么。题目给定一个正整数 n,我们需要找到所有非零的数字,把它们按顺序连接起来,形成一个新的数字。然后,我们需要计算这个新数字的数字和(Digital Sum),最后将新数字乘以这个数字和,得到的结果就是我们要返回的答案。

听起来是不是有点绕?没关系,我们举个例子就明白了。

题目逻辑流程示意图

题目处理流程演示:提取非零数字,连接并计算数字和

示例解析

假设输入 n = 234

  1. 提取非零数字:2、3、4。
  2. 连接非零数字:234。
  3. 计算数字和:2 + 3 + 4 = 9。
  4. 计算最终结果:234 * 9 = 2106。

再比如 n = 101

  1. 提取非零数字:1、1。
  2. 连接非零数字:11。
  3. 计算数字和:1 + 1 = 2。
  4. 计算最终结果:11 * 2 = 22。

看到这里,大家应该对题目有了更清晰的认识。接下来,我们看看如何用代码来实现它。

算法流程图

解题步骤的代码执行流程可视化

解题思路

第一步:提取非零数字

我们可以通过将数字转换为字符串,然后遍历每一个字符,过滤掉字符为 '0' 的部分。当然,也可以通过数学运算(取模和除法)来获取每一位数字,这里为了代码的简洁性,我选择使用字符串操作的方式。

第二步:连接非零数字

提取出来的非零数字字符,可以直接拼接成一个字符串,然后转回整数。这里需要注意的是,如果所有数字都是0(虽然题目说是正整数,但为了代码健壮性,我们可以假设这种情况),那么连接后的结果可能需要特殊处理。不过根据题目约束,我们至少会有一个非零数字。

第三步:计算数字和

数字和的计算比较简单,就是将每一位非零数字相加。在遍历提取非零数字的时候,我们可以顺便累加它们的值,这样只需要遍历一次,效率更高。

第四步:计算最终结果

最后,将连接后的数字与累加得到的数字和相乘,返回结果即可。

代码实现

这里提供一个 Python 的参考实现:

class Solution:
    def findTheNumber(self, n: int) -> int:
        num_str = str(n)
        non_zero_digits = []
        digit_sum = 0

for digit in num_str:
            if digit != '0':
                d = int(digit)
                non_zero_digits.append(digit)
                digit_sum += d

if not non_zero_digits:
            return 0

# 连接非零数字
        connected_num = int(''.join(non_zero_digits))

return connected_num * digit_sum

代码解释

  1. 初始化:将输入的整数 n 转换为字符串 num_str,并初始化两个列表/变量 non_zero_digitsdigit_sum
  2. 遍历与提取:遍历 num_str 中的每一个字符 digit,如果它不是 '0',则将其加入 non_zero_digits 列表,并将其整数值加到 digit_sum 上。
  3. 边界检查:如果 non_zero_digits 为空(理论上不会发生),返回0。
  4. 连接数字:使用 ''.join(non_zero_digits) 将所有非零数字字符连接起来,并转换为整数 connected_num
  5. 计算并返回结果:返回 connected_num * digit_sum

复杂度分析

  • 时间复杂度:O(d),其中 d 是数字 n 的位数。我们需要遍历数字的每一位一次。
  • 空间复杂度:O(d),用于存储非零数字字符串。在最坏情况下(没有0),我们需要存储所有的数字字符。

总结

这道题目虽然难度不大,但非常考验细节处理。通过这道题,我们练习了数字的拆分、字符串与数字的转换以及基本的累加操作。在面试中,遇到这种题目,不仅要写出代码,还要清晰地表达思路,并考虑边界情况。

希望这篇解析对你有所帮助!如果你有更好的解法或者疑问,欢迎在评论区交流讨论。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭