Leetcode/Java学习笔记

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

2018-07-12  本文已影响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循环。

上一篇 下一篇

猜你喜欢

热点阅读