Easy
题目描述
给定一个正整数 n。
返回通过移除 n 的十进制表示中所有零而得到的整数。
示例 1:
输入:n = 1020030
输出:123
解释:从 1020030 中移除所有零后,我们得到 123。
示例 2:
输入:n = 1
输出:1
解释:1 的十进制表示中没有零。因此,答案是 1。
约束条件:
1 <= n <= 10^15
提示:
- 转换为字符串并过滤掉
'0'字符。
解题思路
解题思路
这道题目要求移除一个正整数十进制表示中的所有零字符。根据题目提示,最直观的方法是将整数转换为字符串,然后过滤掉所有的 '0' 字符。
主要思路:
字符串处理法:将整数转换为字符串,遍历字符串中的每个字符,只保留非零字符,最后将结果转换回整数。
数学方法:通过取模和除法操作逐位提取数字,跳过零位,重新构建新的数字。
推荐解法:字符串处理法
- 实现简单,逻辑清晰
- 代码可读性强
- 时间复杂度和空间复杂度都是可接受的
虽然数学方法在理论上可能更节省空间,但考虑到代码的简洁性和可维护性,字符串处理法是更好的选择。特别是在现代编程语言中,字符串操作已经得到了很好的优化。
需要注意的是,由于输入保证是正整数且移除零后仍然是有效数字(不会出现全零的情况),所以不需要处理边界情况。
代码实现
class Solution {
public:
long long removeZeros(long long n) {
string s = to_string(n);
string result = "";
for (char c : s) {
if (c != '0') {
result += c;
}
}
return stoll(result);
}
};
class Solution:
def removeZeros(self, n: int) -> int:
s = str(n)
result = ""
for c in s:
if c != '0':
result += c
return int(result)
public class Solution {
public long RemoveZeros(long n) {
string s = n.ToString();
string result = "";
foreach (char c in s) {
if (c != '0') {
result += c;
}
}
return long.Parse(result);
}
}
var removeZeros = function(n) {
const s = n.toString();
let result = "";
for (let c of s) {
if (c !== '0') {
result += c;
}
}
return parseInt(result);
};
复杂度分析
| 复杂度类型 | 大小 |
|---|---|
| 时间复杂度 | O(d) |
| 空间复杂度 | O(d) |
其中 d 是输入数字 n 的位数。我们需要遍历数字的每一位来检查是否为零,同时需要额外的空间来存储字符串表示和结果字符串。