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

sumx 中所有数字的 数字和 

返回一个整数,表示 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 = 1sum = 1
  • 因此,答案是 x * sum = 1 * 1 = 1

 

提示:

  • 0 <= n <= 109

解题方法:不断处以10

当$n$非零时,不断取出$n$在十进制下的个位$t$,并将$n$除以$10$并想下取整。如果个位$t$非零,则进行处理:

  1. 求和:使用一个变量$cnt$记录所有非零$t$的和;

  2. 拼接:使用一个变量$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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* @LastEditTime: 2026-07-07 11:50:28
*/
typedef long long ll;
class Solution {
public:
ll sumAndMultiply(int n) {
ll cnt = 0, con = 0, pow = 1;
while (n) {
ll t = n % 10;
n /= 10;
if (!t) {
continue;
}
con += pow * t;
pow *= 10;
cnt += t;
}
return cnt * con;
}
};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


3754.连接非零数字并乘以其数字和 I:O(1)非字符串写法
https://blog.letmefly.xyz/2026/07/07/LeetCode 3754.连接非零数字并乘以其数字和I/
作者
发布于
2026年7月7日
许可协议