【2019.11.26】算法学习记录——加一

算法-加一


给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

来源:力扣(LeetCode)

思路一:

class Solution {
    public int[] plusOne(int[] digits) {
        String cache ="";
        String sb = "";
        for(int i =0;i<digits.length;i++){
            sb= sb + digits[i];
        }
        long before = Long.parseLong(sb);
        long after = before + 1;
        String result=String.valueOf(after);
        int[] list = new int[result.length()];
        for(int i=0; i<result.length();i++){
            list[i] = Integer.parseInt(String.valueOf(result.charAt(i)));
        }
        return list;        
    }
}
    

该方法思路就是将数组转成字符串后,再转成数字,将数字加一后再转成字符串,获取长度后创建空数组, 将字符串各个位转换成数字填入。
但是该方法存在的问题是,如果输入的数组过长,在转换为数字的时候会出现溢出问题。


思路二:

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i = digits.length-1; i>=0; i--){
            digits[i]++;
            digits[i] = digits[i]%10;
            if(digits[i]!=0){
                return digits;
            }
            }
            digits = new int[digits.length+1];
            digits[0] = 1;
            return digits;
        }
    }

该方法适用于任何数组(首位不为0),通过从右向左进行处理,主要考虑三种情况:

  1. 123(普通情况);
  2. 199(需要进位);
  3. 999(不仅进位,数组长度也要改变)。

笔记
声明数组时必须声明数组长度,以下是常用声明数组方法:

String[] aArray = new String[5];

String[] bArray = {"a","b","c", "d", "e"};

String[] cArray = new String[]{"a","b","c","d","e"};
发布了17 篇原创文章 · 获赞 0 · 访问量 343

猜你喜欢

转载自blog.csdn.net/cletitia/article/details/103261658