记录三
题:给出一个32位的有符号位整数,将整数进行翻转。(整数的存储范围在[-231,231-1],若翻转后的整数溢出,则返回0)
例:input:123,output:321
input:-123,ouput:-321
input:120,output:21
思路:做这道题的时候,很长时间都没想到用栈,发现自己的数据结构真是白学了。涉及到翻转问题,应该首先想到的就是用栈来解决。将整数类型转换为String类型,能够更好的进行连接。过程中需要考虑到符号的问题,在对字符进行入栈的时候,首先判断下第一位是否为“-”,若果是,符号就不应该入栈。
下面是代码:
class Solution {
public int reverse(int x) {
String input = String.valueOf(x);
Stack s = new Stack(); //java中栈的使用
for(int i = 0;i<input.length();i++){
if(input.charAt(i)=='-'){ //判断符号
i+=1;
}
s.push(input.charAt(i)); //入栈
}
String output="";
while(!s.isEmpty()){
output+=s.pop(); //出栈
}
Long y=Long.parseLong(output);
if(y<(-Math.pow(2.0,31.0)) || y>(Math.pow(2.0,31)-1)){
return 0;
}
else if(input.charAt(0)=='-')
return -Integer.parseInt(output);
else
return Integer.parseInt(output);
}
}
时间复杂度:O(s.length()),空间复杂度O(s.length());
用栈来解决数字翻转问题是一个很好的解决方法,但是对于数字的翻转还有更加简洁方便的方法,不用将数字转换为字符串来进行操作。
//pop操作,相当于倒序
pop = number % 10;
number /= 10;
//翻转计算
rev = rev * 10 + pop;