Leetcode代码学习周记——Reverse Integer

本文记录了LeetCode上Reverse Integer问题的解决方法。通过提取符号、逆序存储每位数字并检查溢出来实现整数反转。难点在于处理溢出情况,作者认为这是一个有价值的学习经验。
摘要由CSDN通过智能技术生成

原题目链接:

https://leetcode.com/problems/reverse-integer/description/

题目描述:

反转一个整数的数位。

实例:

x = 123,return 321 

x = -123,return -321

注意:
输入假定为32位有符号整数。当反转的整数溢出时,您的函数应返回0


除了题目给出的限制,还应该考虑诸如:10,10000等尾数含有0的数字反转后的情况。


为了解决这个题目,我主要分为几个步骤完成代码:

1.提取符号,为了避免负数在运算时的干扰,先把符号(也可能没有)提取出来,再最后的返回结果乘回去。

2.提取每一位上的数字,从尾部开始通过不断%10的方法提取,并存入一个队列中,这样通过队列出来的数字恰好是按照翻转的顺序排列。

3.将队列中的数字序列组合成翻转后的整数,并且每步运算都要先经过溢出检测才会保存在临时的结果中,否则直接返回0


以下是代码实现:

#include<queue>
class Solution {
public:
    int reverse(int x) {
        int flag = (x < 0) ? -1 : 1;
		x = (x < 0) ? (-1 * x) : x;
		queue<int> q;
		while (x != 0) {
			int mod = x % 10;
			x = x / 10;
			q.push(mod);
		}
		int t_result = 0;
		while (!q.empty()) {
			int temp = t_result * 10 + q.front();
			if (t_result == (temp - q.front()) / 10) {
				t_result = temp;
			}
			else {
				return 0;
			}
			q.pop();
		}
		return t_result * flag;
    }
};

代码提交结果:


看上去时间复杂度不错……


个人认为这次题目的主要难点不是如何翻转数字而是判断数字的溢出,虽然说这是一个看上去很基础的知识,但我还是第一次用到,私认为是一次很有意义的学习过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值