[leetcode]Plus One

这道题包含在难度一的习题汇总里面。现在单独列出来。

新博文换了一种思路,代码更简洁,空间更节省

新博文地址:[leetcode]Plus One

 

Plus One

Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.

 

题目大意是,一个非负数用数组表示,对这个数+1,返回+1后的数组结果

第一反应肯定是把数组的数转换成自然数,但是肯定是不对的(我们只见过数位太多,用数组表示大数,逆向显然不对的,虽然我没试过,其实就是一个加法的模拟,不多说)

 

    public int[] plusOne(int[] digits) {
       		if(digits == null || digits.length == 0){
			return null;
		}
		int length = digits.length;
		int[] result = new int[1+length];//放结果,可能进位,因此多开一位
		for(int i = length - 1; i >= 0; i--){
			result[i + 1] = digits[i];
		}
		result[0] = 0;
		digits[length - 1] = digits[length - 1] + 1;
		if(digits[length - 1] < 10){
			return digits;
		}else{
			result[length] = digits[length - 1];
			for(int i = length - 1; i >= 0; i--){
				result[i] += 1;
				result[i + 1] -= 10;
				if(result[i] < 10){
					break;
				}
			}
		}
		if(result[0]!=0){
			return result;
		}else{
			int[] tem = Arrays.copyOfRange(result, 1, result.length );
			return tem;
		}
    }

 感觉自己空间开的太多。。。。

你可能感兴趣的:(LeetCode)