【Java】面试真题——给定一个32位有符号整数,将整数中的数字进行反转。(租租车2020校招笔试Java真题)

示例 1:
输入:123
输出::321

示例 2:
输入:-123
输出: -321

示例 3:
输入:120
输出: 21

题目分析:
        一看是将数字反转,这肯定把原数字先对10求余,再将求余后所得数字乘以10加上上次数字和,再将原数字除以10,重复以上步骤,直到原数字等于0.
有可能遇到的解题思路陷阱:
        所求的反转数字,可能在反转过程中就超出了int类型的数值范围,导致舍弃了超出的部分,剩下的继续进行了循环相加,但是此时数字已经改变,不是我们所期望的值,所以我们每次都要对循环中的反转数字加以判断,一旦超出范围,就返回0。
解题思路分析以及代码实现:

思路:偷梁换柱——long类型代替int类型进行判断,最后返回值强转(long -> int)

	public int reverse(int x) {
		long sum = 0;
		while (x != 0) {
			int y = x % 10;
			sum = y + sum * 10;
			if (sum < Integer.MIN_VALUE || sum > Integer.MAX_VALUE) {
				return 0;
			}
			x = x / 10;
		}
		return (int) sum;
	}

复杂度分析:
时间复杂度:O(1)。
空间复杂度:O(1)。

发布了62 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Yanzudada/article/details/101692414