本文是在学习中的总结,欢迎转载但请注明出处: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;
}

Leetcode_66_Plus One的更多相关文章

随机推荐

  1. 新手级配置 react react-router4.0 redux fetch sass

    前言 最近公司来了几个实习生,刚好我手头没什么要紧事,然后领导让我带他们学习react, 为下一个react项目做基础. 然后随手写了几个demo,帮助他们了解正经项目如何去构建配置项目. 现在分享出 ...

  2. Java第4次实验提纲(面向对象2-继承、多态、抽象类与接口与Swing)

    PTA 题集面向对象2-进阶-多态接口内部类 第1次实验 1.1 题集5-1(Comparable) 难点:如果传入对象为null,或者传入对象的某个属性为null,怎么处理? 1.2 题集5-2(C ...

  3. [Gradle系列]Gradle打包apk多版本,多渠道,多环境,多功能,多模块随心所欲

    Tamic: http://blog.csdn.net/sk719887916/article/details/53411771 开始 上篇Gradle发布Module(Maven)到jcenter, ...

  4. ZooKeeper之(五)集群管理

    在一台机器上运营一个ZooKeeper实例,称之为单机(Standalone)模式.单机模式有个致命的缺陷,一旦唯一的实例挂了,依赖ZooKeeper的应用全得完蛋. 实际应用当中,一般都是采用集群模 ...

  5. Android图表库MPAndroidChart(五)——自定义MarkerView实现选中高亮

    Android图表库MPAndroidChart(五)--自定义MarkerView实现选中高亮 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  6. Hadoop的RPC通信原理

    RPC调用: RPC(remote procedure call)远程过程调用: 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称为客户端(client): server端 ...

  7. protobuf中的枚举缺省值应该为UNKNOWN

    protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...

  8. nginx平台初识(二) 浏览器 HTTP 协议缓存机制详解

    1.缓存的分类 缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). 服务端缓存又分为 代理服务器缓存 和 反 ...

  9. [ExtJS5学习笔记]第二十五节 利用window.open()函数实现ExtJS5的登陆页面跳转

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40427543 mvvm方式实现登陆的博客:http://blog.csdn.net/s ...

  10. qsort函数应用大全

    七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序  int num[100]; Sample: int cmp ( const void *a , c ...