不使用数组列表实现整数各位升序排列,如何解决前导零问题
整数各位升序重排前导零问题解决方案
首先点明两个核心问题:
- 你现有代码里的
sortedN==10是相等判断,没有赋值效果,属于无效代码 - 你遇到的前导零无法拼接的问题,本质是
int类型为数值类型,数值本身不支持前导零,比如0123作为int存储时会自动转为123,不存在保留前导零的可能。如果你需要保留前导零的展示效果,必须将返回值改为字符串类型;如果仅要求数值符合升序规则,只需要调整拼接顺序跳过前导零即可。
以下是符合「不使用数组/列表」要求的修正代码,适配任意位数正整数:
int ascendingNumbers (int n) { int sortedN = 0; int temp; // 先处理非零数字,从1开始遍历避免前导零 for (int i = 1; i <= 9; i++) { temp = n; while (temp > 0) { if (temp % 10 == i) { sortedN = sortedN * 10 + i; } temp /= 10; } // 第一个非零数字处理完后,拼接所有0 if (sortedN != 0 && i == 1) { temp = n; while (temp > 0) { if (temp % 10 == 0) { sortedN *= 10; } temp /= 10; } } } // 特殊处理输入全为0的情况 return sortedN == 0 ? 0 : sortedN; }
测试效果示例:
- 输入
1032,输出1023 - 输入
100,输出100 - 输入
4302,输出2034
如果确实需要输出带前导零的结果,因为数值类型不支持前导零,必须使用字符串输出,如果你允许用字符数组作为输出载体(不属于存储数字的数组/列表,符合要求),可以按相同逻辑拼接字符即可。
内容的提问来源于stack exchange,提问作者jesus
相关产品推荐
相关产品推荐

