题目
给你一个用字符串表示的正整数 num
,请你以字符串形式返回不含尾随零的整数 num
。
示例 1:
输入:num = "51230100"
输出:"512301"
解释:整数 "51230100"
有 2 个尾随零,移除并返回整数 "512301"
。
示例 2:
输入:num = "123"
输出:"123"
解释:整数 "123"
不含尾随零,返回整数 "123"
。
提示:
1 <= num.length <= 1000
num
仅由数字0
到9
组成num
不含前导零
代码
完整代码
#include <stdio.h>
#include <string.h>char * removeTrailingZeros(char * num) {int len = strlen(num);for (int i = len - 1; i > 0; i--) {if (num[i] != '0') {break;} else {num[i] = '\0';}}return num;
}
思路分析
这套代码使用简单的字符串遍历和修改方法,去掉正整数字符串 num
中的尾随零。我们从字符串的最后一个字符开始向前遍历,如果遇到字符 '0'
就将其替换为字符串结束符 '\0'
。如果遇到不是 '0'
的字符,则停止遍历。
拆解分析
removeTrailingZeros
函数
char * removeTrailingZeros(char * num) {int len = strlen(num); // 获取字符串的长度for (int i = len - 1; i > 0; i--) { // 从字符串末尾向前遍历if (num[i] != '0') { // 遇到不是'0'的字符则停止遍历break;} else {num[i] = '\0'; // 将尾随的'0'替换为字符串结束符}}return num; // 返回去掉尾随零后的字符串
}
这个函数的主要逻辑包括:
- 获取字符串的长度。
- 从字符串末尾开始向前遍历。
- 遇到不是
'0'
的字符时停止遍历。 - 将尾随的
'0'
替换为字符串结束符'\0'
。 - 返回去掉尾随零后的字符串。
复杂度分析
- 时间复杂度:O(n),其中
n
是字符串num
的长度。因为最多遍历一次字符串。 - 空间复杂度:O(1),因为没有使用额外的空间,所有操作都在原字符串上进行。