Skip to content

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.29
  • 题目:3300. 最小元素
  • 难度:简单
  • 标签:数组、数学

1. 题目理解

问题描述: 给定一个整数数组 nums,将数组中每个元素替换为它的各位数字之和,返回替换后的数组中的最小值

示例

输入:nums = [10,12,13] 输出:1 解释:各位和分别为 1、3、4,最小值是 1。

2. 解题思路

核心观察

  • 求数字的各位和有两种方式:字符串遍历、数学取模运算。
  • 数学法效率更高,无需字符串转换,减少开销。

算法步骤

  1. 遍历数组所有元素。
  2. 对每个数字,循环取余累加得到各位和。
  3. 记录最小的各位和。

3. 代码实现

java
package lc3300;

public class Solution {
    public int minElement(int[] nums) {
        int res = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            String s = String.valueOf(nums[i]);
            int curRes = 0;
            for (int j = 0; j < s.length(); j++) {
                int num = s.charAt(j) - '0';
                curRes += num;
            }

            res = Math.min(res, curRes);
        }
        return res;
    }
}

4. 代码优化说明

(代码未做任何修改,仅添加注释讲解)

java
class Solution {
public int minElement(int[] nums) {
    // 获取数组长度
    int len = nums.length;
    // 初始化最小值为整型最大值
    int min = Integer.MAX_VALUE;

    // 遍历数组中的每一个数字
    for (int i = 0; i < len; i++) {
        int num = nums[i];
        // 存储当前数字的各位之和
        int temp = 0;

        // 循环计算各位和:取最后一位累加,然后移除最后一位
        while (num > 0) {
            temp += num % 10;
            num /= 10;
        }

        // 更新最小值
        min = Math.min(min, temp);
    }

    return min;
}
}

5. 复杂度分析

  • 时间复杂度O(n×d)
    n 为数组长度,d 为数字最大位数,整体接近线性复杂度。
  • 空间复杂度O(1)
    仅使用常数级变量,无额外空间。

6. 总结

  • 核心:数学取模求各位和,比字符串方式更高效。
  • 优化点:去掉字符串转换操作,纯数值运算提升性能。
  • 关键技巧:num % 10 取最后一位,num /= 10 去掉最后一位。

Powered by VitePress 1.6.4 | 持续更新中