美文网首页Leetcode/Java学习笔记
66. Plus One (类型转换,int[], String

66. Plus One (类型转换,int[], String

作者: 萧瑟空间 | 来源:发表于2018-07-12 15:47 被阅读0次

    大致需求的输入输出为:


    程序需求

    我的偷懒转换类型版为:

    class Solution {
        public int[] plusOne(int[] digits) {
            String int_str = "";
            for(int item: digits){
                int_str +=  String.valueOf(item);
                //将每一个数字转化成String
            }
            int num = Integer.valueOf(int_str).intValue();
            //再将最后转化成的String转成int
            int_str = String.valueOf(num+1);
            //最终数+1后转回String
            char[] int_char = int_str.toCharArray();
            //String变成char数组
            int[] result = new int[int_char.length];
            for(int i = 0; i < int_char.length; i++){
                result[i] = int_char[i] - '0';
                //将char数组转回int数组,每一个单独的char转成int为 - '0'
            }
            return result;
        }
    }
    

    但是实际上这个做法是没法通过的,因为给的初始数可能超过int值的最大值。
    Integer.MAX_VALUE = 2147483647
    Integer.MIN_VALUE = -2147483648
    但是却很好地练习了各种类型转换。

    直接用数组来操作的解法有:

    class Solution {
        public int[] plusOne(int[] digits) {
            Boolean flag = false;
            int length = digits.length;
            int p = length-1;
            do{
                if(p>=0){
                    flag = helper(p, digits);
                    //数组是一个object,把遥控器的值传过去了还是能修改到数组本身,所以最后数组值变了
                    p -= 1;
                }
                else{
                    int answer[] = new int[length+1];
                    answer[0] = 1;
                    return answer;
                }
            }while(!flag);
            return digits;
        }
        public boolean helper(int p, int[] ori){
                if(ori[p] == 9){
                    ori[p] = 0;
                    return false;
                }
                else{
                    ori[p] += 1;
                    return true;
                }
            }
    }
    

    这是答案里最简洁的一个Java solution

    public int[] plusOne(int[] digits) {
            
        int n = digits.length;
        for(int i=n-1; i>=0; i--) {
            if(digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            
            digits[i] = 0;
        }
        
        int[] newNumber = new int [n+1];
        newNumber[0] = 1;
        
        return newNumber;
    }
    

    大概只有我代码的一半长度。其实底层的逻辑是一模一样的,但是它并没有像我一样把“给某一位+1”的逻辑单独挑出来做成一个函数。答案的代码逻辑更清晰,用一个for循环内部直接return的方式来替代了我的do while循环。

    相关文章

      网友评论

        本文标题:66. Plus One (类型转换,int[], String

        本文链接:https://www.haomeiwen.com/subject/vghrpftx.html