LeetCode第二题:整数翻转

版权声明:未经允许,请勿转载! https://blog.csdn.net/qq_40005658/article/details/88399389

题目内容:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解析:

这道题并不难,最容易想到的就是不停的进行取余和整除,每取出一个数就将其进行取余逆运算,负数不影响运算。这其中要进行判断翻转后的数是否超过整型数据范围。

具体实现代码如下:

public static int reverse1(int x) {
	int rev = 0;
	while(x != 0) {
		int pop = x%10;
		x = x/10;
                //这里最大数除10,是因为边界问题,当最后个位数进入循环后,
                //由于已经除10了,所以最大数也应该除10
		if (rev > Integer.MAX_VALUE/10) return 0;     
		if (rev < Integer.MIN_VALUE/10) return 0;
		rev = rev*10 + pop;     //得出翻转后的数
	}
	return rev;
}

时间复杂度:数x每次都会除10,所以设需要n次尽,可以得出10^n = x,得出n=log10(x),所以时间复杂度是:O(log(x))

空间复杂度是:O(1)

猜你喜欢

转载自blog.csdn.net/qq_40005658/article/details/88399389
今日推荐