记录三——数字翻转

记录三

题:给出一个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;

猜你喜欢

转载自blog.csdn.net/w1375834506/article/details/87930353