欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Leetcode7:整数翻转

Leetcode7:整数翻转

2025/4/19 8:47:59 来源:https://blog.csdn.net/qq_36070104/article/details/143258787  浏览:    关键词:Leetcode7:整数翻转

原题地址:. - 力扣(LeetCode)

题目描述:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

解题思路

  1. 首先,我们检查输入的整数是否为0,如果是,直接返回0。
  2. 将整数转换为字符串,这样我们可以轻松地处理正负号和每一位数字。
  3. 检查字符串中是否包含负号,如果包含,设置一个标志变量flagtrue
  4. 使用一个栈来存储每一位数字。我们遍历字符串中的每个字符(去掉负号后的数字),并将它们压入栈中。
  5. 使用StringBuilder来构建反转后的字符串。我们从栈中弹出所有元素,并添加到StringBuilder中,实现反转。
  6. 最后,我们尝试将反转后的字符串转换回整数。如果原数为负数,我们需要在反转后的字符串前加上负号。如果转换失败(例如,反转后的数超出了整数的范围),我们返回0。

时间复杂度

时间复杂度是 O(n),其中 n 是输入整数的位数。这是因为我们需要遍历整个字符串一次,将每个字符压入栈中,然后再从栈中弹出。

空间复杂度

空间复杂度是 O(n),因为我们使用了一个栈来存储每一位数字,以及一个StringBuilder来构建反转后的字符串。在最坏的情况下,这两个数据结构都需要存储 n 个字符。

class Solution {/*** 将一个整数进行反转。* @param x 需要反转的整数* @return 反转后的整数*/public int reverse(int x) {// 如果输入为0,直接返回0if(x == 0) {return x;}// 将整数转换为字符串,方便处理正负号和每一位数字String b = String.valueOf(x);// 标记是否为负数boolean flag = false;if(b.indexOf("-") >= 0) {flag = true;}// 使用栈来存储每一位数字,栈的特性是后进先出,方便我们反转数字Stack<Character> stack = new Stack<>();// 将字符串中的每个字符(数字)压入栈中,如果原数为负数,则去掉负号for(char c : b.replace("-", "").toCharArray()) {stack.push(c);}// 使用StringBuilder来构建反转后的字符串,它比字符串拼接更高效StringBuilder sb = new StringBuilder();// 从栈中弹出所有元素,并添加到StringBuilder中,实现反转while(!stack.isEmpty()) {Character c = stack.pop();sb.append(c);}// 尝试将反转后的字符串转换回整数try {// 如果原数为负数,则在反转后的字符串前加上负号if(flag) {return Integer.parseInt("-" + sb.toString());} else {// 否则直接转换return Integer.parseInt(sb.toString());}} catch(Exception e) {// 如果转换失败(例如超出整数范围),则返回0return 0;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词