【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 nn非零时,不断取出n nn在十进制下的个位t tt,并将n nn除以10 1010并想下取整。如果个位t tt非零,则进行处理:
求和:使用一个变量c n t cntcnt记录所有非零t tt的和;
拼接:使用一个变量c o n concon记录所有非零t tt十进制下的拼接结果。
假设当前c o n concon为234 234234且t tt为1 11,怎么把1 11拼接到234 234234的前面呢?令c o n + = t × 10 3 con+=t\times 10^3con+=t×103即可。这个10 3 10^3103可以使用一个变量p o w powpow来记录,每次拼接完成后p o w = p o w × 10 pow=pow\times 10pow=pow×10。
最终c n t × c o n cnt\times concnt×con即为答案。
- 时间复杂度O ( log n ) O(\log n)O(logn)
- 空间复杂度O ( 1 ) O(1)O(1)
AC代码
C++
/* * @LastEditTime: 2026-07-07 11:50:28 */typedeflonglongll;classSolution{public:llsumAndMultiply(intn){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;}returncnt*con;}};同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源