Leetcode_66_Plus One

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pistolove/article/details/41652987

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41652987


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"后所得到的数组。

         例如数字999对应于数组[9,9,9],那么“加1”后得到的数组为[1,0,0,0]。

(2)题目主要考察的是进位问题。特别是数组第1个元素”加1“后可能产生进位的问题,这时就需扩充数组。

(3)首先,从后往前遍历数组,先对“个位”加1进行判断,如果“加1”后所得整数不大于9,则无进位产生,个位加1后返回;

         其次,如果个位产生进位,就需要改变标志位flag,并对后续位数进行判断,只要后续位产生进位,就改变flag,不产生进位则加1后返回;

         最后,遍历完成后需通过flag对最高位进行判断,如果最高位大于9,说明最高位产生了进位,此时需调整数组大小,并将新数组的最高位置为1。


算法代码实现如下所示:

public static int[] plusOne(int[] digits) {
	if (digits.length == 0)
		return null;
	int len = digits.length;

	int flag = 0;
	for (int i = len - 1; i >= 0; i--) {
		if (i == len - 1) {
			if (digits[i] + 1 > 9) {
				digits[i] = digits[i] + 1 - 10;
				flag = 1;
			} else {
				digits[i] = digits[i] + 1;
				break;
			}
			continue;
		}

		// 从倒数第二个开始
		if (digits[i] + flag > 9) {
			digits[i] = digits[i] + 1 - 10;
			flag = 1;
		} else {
			digits[i] = digits[i] + 1;
			flag = 0;
			break;
		}
	}

	//遍历完成后,如果flag为1说明最后遍历的数字大于10,需扩充数组
	if (flag == 1) {
		int[] result = new int[len + 1];
		result[0] = 1;
		for (int i = 0; i < len; i++) {
			result[i + 1] = digits[i];
		}
		return result;
	}

	return digits;
}


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试