LeetCode 每日一题笔记 日期:2026.05.11 题目:2553. 分割数组中数字的数位

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.11
  • 题目:2553. 分割数组中数字的数位
  • 难度:简单
  • 标签:数组、字符串、模拟

1. 题目理解

问题描述

给定一个正整数数组 nums,要求将每个整数按其原始数位顺序分割后,依次存入结果数组 answer 中,保持原数组的处理顺序。

示例

输入:nums = [13,25,83,77]

输出:[1,3,2,5,8,3,7,7]

解释:

13 → 1,3,25 → 2,5,83 → 8,3,77 → 7,7,按顺序拼接得到结果。

2. 解题思路

核心观察

  • 每个数字的数位顺序需要保留,可通过数字取模+整除逆序取出数位,再整体反转列表恢复顺序;
  • 也可通过字符串转换直接按字符顺序读取,更直观。

算法步骤

  1. 遍历数组中的每个数字;
  2. 逆序取出每个数字的所有数位(num % 10 取末位,num /= 10 移除末位),存入列表;
  3. 对列表整体反转,恢复数位的原始顺序;
  4. 将列表转换为 int[] 并返回。

3. 代码实现

java 复制代码
package lc2553;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] separateDigits(int[] nums) {
        List<Integer> list = new ArrayList<>();
        for (int i = nums.length - 1; i >= 0; i--) {
            int num = nums[i];
            while (true) {
                list.add(num % 10);
                if ((num /= 10) == 0) break;
            }
        }
        Collections.reverse(list);
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

4. 代码优化说明

优化点1:字符串转换版(更简洁)

java 复制代码
public int[] separateDigits(int[] nums) {
    List<Integer> list = new ArrayList<>();
    for (int num : nums) {
        for (char c : String.valueOf(num).toCharArray()) {
            list.add(c - '0');
        }
    }
    return list.stream().mapToInt(Integer::intValue).toArray();
}

优化点2:直接用数组计数(避免反转)

java 复制代码
public int[] separateDigits(int[] nums) {
    int count = 0;
    for (int num : nums) {
        count += String.valueOf(num).length();
    }
    int[] res = new int[count];
    int idx = 0;
    for (int num : nums) {
        String s = String.valueOf(num);
        for (char c : s.toCharArray()) {
            res[idx++] = c - '0';
        }
    }
    return res;
}

5. 复杂度分析

  • 时间复杂度 :O(N×D)O(N \times D)O(N×D),其中 NNN 为数组长度,DDD 为数字的平均位数(最多10位,可视为常数)。
  • 空间复杂度 :O(N×D)O(N \times D)O(N×D),存储结果列表的空间开销。

6. 总结

  • 核心思路是数字数位提取 + 顺序恢复,两种主流实现方式(数字取模/字符串转换)均能高效完成任务;
  • 关键技巧:数字取模法需通过整体反转恢复数位顺序,字符串转换法可直接按字符顺序读取,更直观;
  • 本题为基础数组处理问题,重点考察数位提取和列表操作能力。
相关推荐
饼干哥哥1 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者2 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者2 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月5 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星6 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星6 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC1 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
鱼鱼不愚与1 天前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
复杂网络1 天前
论最小 Agent 计算机的形态
算法