[LeetCode] Reverse Integer 解题报告

—— write for my baby, mua


[题目]

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321


[中文翻译]

将整数的数字反向。

例子1: x = 123, 返回 321
例子2: x = -123, 返回 -321


[解题思路]

O(K) K为数字的长度

首先将num的符号提取出来,将num转换为一个正数。

然后将num转换为字符串,将字符串反转之后再转换为数字res。

将符号和res结合后返回。


[C++代码]

class Solution {
public:
	int reverse(int x) {
		int sign = 1;

		if (x < 0) {
			x = -x;
			sign = -1;
		}

		stringstream ss;
		string s;
		
		ss << x;
		ss >> s;

		int l = 0, r = s.size() - 1;
		char tmp;
		
		while (l < r) {
			tmp = s.at(l);
			s.at(l++) = s.at(r);
			s.at(r--) = tmp;
		}

		long long y;
		ss.clear();
		ss << s;
		ss >> y;

		if (0 != (y >> 31))
			y = 0;
		x = y;

		return sign*x;
	}
};

[注意]

有一点题目没有描述清楚。对于反转之后的结果超出int范围的,需要返回0。例如,2147483647反转之后为7463847412,超过了int的范围,应返回0。在程序中,实际上就是判断了去符号之后,超过31位的部分是否不为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值