3754.连接非零数字并乘以其数字和 I:O(1)非字符串写法
【LetMeFly】3754.连接非零数字并乘以其数字和 I:O(1)非字符串写法
力扣题目链接:https://leetcode.cn/problems/concatenate-non-zero-digits-and-multiply-by-sum-i/
给你一个整数 n。
将 n 中所有的 非零数字 按照它们的原始顺序连接起来,形成一个新的整数 x。如果不存在 非零数字 ,则 x = 0。
sum 为 x 中所有数字的 数字和 。
返回一个整数,表示 x * sum 的值。
示例 1:
输入: n = 10203004
输出: 12340
解释:
- 非零数字是 1、2、3 和 4。因此,
x = 1234。 - 数字和为
sum = 1 + 2 + 3 + 4 = 10。 - 因此,答案是
x * sum = 1234 * 10 = 12340。
示例 2:
输入: n = 1000
输出: 1
解释:
- 非零数字是 1,因此
x = 1且sum = 1。 - 因此,答案是
x * sum = 1 * 1 = 1。
提示:
0 <= n <= 109
解题方法:不断处以10
当$n$非零时,不断取出$n$在十进制下的个位$t$,并将$n$除以$10$并想下取整。如果个位$t$非零,则进行处理:
求和:使用一个变量$cnt$记录所有非零$t$的和;
拼接:使用一个变量$con$记录所有非零$t$十进制下的拼接结果。
假设当前$con$为$234$且$t$为$1$,怎么把$1$拼接到$234$的前面呢?令$con+=t\times 10^3$即可。这个$10^3$可以使用一个变量$pow$来记录,每次拼接完成后$pow=pow\times 10$。
最终$cnt\times con$即为答案。
- 时间复杂度$O(\log n)$
- 空间复杂度$O(1)$
AC代码
C++
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
3754.连接非零数字并乘以其数字和 I:O(1)非字符串写法
https://blog.letmefly.xyz/2026/07/07/LeetCode 3754.连接非零数字并乘以其数字和I/