plus-one java

题目描述


Given a number represented as an array of digits, plus one to the number.


题目大意

  给定一个用数组表示的一个数,对它进行加一操作。 
  每一个数位都存储在数组的一个位置上。数组下标从大到小表示数位从低位到高位。 

解题思路

  直接求解,设置一个进位标志carry,初值为1,表示加1,从最低位开始tmp = a[x] + carry, 
a[x] = tmp%10,carry = tmp/10,如果carry不为0对下一位再进行操作,直到所有的数位处理完或者carray为0就退出,如果最后还有carray不为0说明整个数组要扩展一个数位。 

代码:

package com.leetcode;

public class PlusOne {

	public int[] plusOne(int[] digits) {

		int carry = 1; // 进位标志,下一位来的进位标志
		int tmp;
		for (int i = digits.length - 1; i >= 0; i--) {
			tmp = digits[i];
			digits[i] = (tmp + carry) % 10; // 计算当前位的新值
			carry = (tmp + carry) / 10; // 计算新的进位

			if (carry == 0) { // 没有进位了就可以退出了
				break;
			}
		}

		if (carry == 1) { // 最后还有一个进位
			int[] result = new int[digits.length + 1];
			System.arraycopy(digits, 0, result, 1, digits.length);
			result[0] = carry;
			
			return result;
		} else {
			return digits;
		}
	}

}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值