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

    1 package com.zhang.hello; public class TestArray { public static int NO1(double [] score){ int coun ...

  2. python学习之路网络编程篇(第四篇)- 续

    Memcache简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  3. iOS开发-文件管理

    iOS学习笔记(十七)--文件操作(NSFileManager) 浅析 RunLoop 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled iOS开发--Swift篇&a ...

  4. C++笔记004:C++类通俗点说

    核心: C++的类就是对C语言的结构体进行了扩展,C++的结构体可以包含函数! ------------------------------------------------------ 我们学习C ...

  5. LintCode题解之斐波纳契数列

    直接使用递归的方法会导致TLE,加个缓存就好了: public class Solution { private Integer[] buff = new Integer[1000]; /* * @p ...

  6. Sybase数据库实现等效的mysql中group_concat功能

    在MySQL中,如果想实现将分组之后的多个数据合并到一列,可以使用group_concat函数,如下图所示: 但是,在Sybase中没有这样的函数(别问我为什么使用Sybase,因为公司用的Sybas ...

  7. 计算机网络之IP地址

    IP地址的分类 整个的因特网就是一个单一的.抽象的网络.IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位的标识符. 所谓分类的IP地址,就是将IP地址划分为 ...

  8. 【SSH系列】Hibernate映射 -- 继承映射

    开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...

  9. WebService案例入门(基础篇)

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52106690 作者:朱培 ID:sdksdk0 邮 ...

  10. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器

    作者: 寒小阳 &&龙心尘 时间:2015年11月. 出处: http://blog.csdn.net/han_xiaoyang/article/details/49949535 ht ...