[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;
		}
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值