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. 总结

  • 核心思路是数字数位提取 + 顺序恢复,两种主流实现方式(数字取模/字符串转换)均能高效完成任务;
  • 关键技巧:数字取模法需通过整体反转恢复数位顺序,字符串转换法可直接按字符顺序读取,更直观;
  • 本题为基础数组处理问题,重点考察数位提取和列表操作能力。
相关推荐
liliangcsdn5 小时前
基本面因子计算的示例分析
算法
Lyyaoo.5 小时前
【动态规划】【待更新】
java·数据结构·算法
AgentMaster5 小时前
开源智能客服系统技术对比:从架构设计到生产部署的实战指南
大数据·人工智能·算法
我不会起名字3225 小时前
一天一道算法题(35):电话号码的字母组合
java·数据结构·后端·python·leetcode·go·回溯
小叶肥辉5 小时前
LangChain链和LangGraph图的学习笔记【六】——提示语模板(3)——Few-Shot Prompting(少样本提示) 模板类
笔记·python·学习·langchain·prompt·aigc
weixin_307779136 小时前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
萧西待水6 小时前
奥赛一本通 1451 棋盘游戏
算法·宽度优先
Niuguangshuo6 小时前
论文解读:Paraformer,非自回归中文 ASR 的并行 Transformer
算法·音视频·语音识别
鹿角片ljp6 小时前
LeetCode 78:子集|回溯、选与不选、递归和path快照
java·数据结构·算法
圣保罗的大教堂6 小时前
leetcode 2033. 获取单值网格的最小操作数 中等
leetcode