本文是在学习中的总结,欢迎转载但请注明出处: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. 【已解决】IIS搭建 asp.net core 项目后 其他电脑访问不到资源文件

    IIS搭建asp.net core 项目后,访问不到里面的资源文件(图片等),解决方法如下: 1.检查asp.net core发布文件中的资源文件是不是都放到了wwwroot名称的目录中. 2.检查a ...

  2. python3+django2 开发易语言网络验证(上)

    创作背景: 在某论坛中下载到一套php开发易语言网络验证的教程,照着看下来,花了两天的时间,结果发现教程里开发的网络验证,以及随着教程一起给学员的源码,都存在着根本用不了的bug!我想要看看能不能在原 ...

  3. 【移动开发】targetSdkVersion的作用

    在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkV ...

  4. Linux 虚存 linux2.6内核特性

    一.大型页面的支持 当代计算机体系结构大都支持多种页面大小,例如,IA-32体系结构支持4KB或4MB的页面, Linux操作系统只是将大型页面用于映射实际的内核映像.大型页面的使用主要是为了改进高性 ...

  5. Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏

    NavBarControl控件:主要作用是制作包含多个选项组并且每个组里包含多个子选项的导航栏: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下 ...

  6. 第一个Angular2的样例

    欢迎跟我一起学习Angular2 本文根据angular2官网手动敲码得来: 本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 - 开发环境搭建 - 配 ...

  7. Dubbo框架应用之(四)--Dubbo基于Zookeeper实现分布式实例

    上三篇文章主要是解决了概念性的补充和学习,充分结合实战来深入理解 入门实例解析 第一:provider-提供服务和相应的接口 创建DemoService接口 package com.unj.dubbo ...

  8. CentOS 7 下使用虚拟环境Virtualenv安装Tensorflow cpu版记录

    1.首先安装pip-install 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error ...

  9. [CSDN_Markdown]Markdown基本语法2

    简介 前文 Markdown基本语法 中介绍了Markdown的基本语法,知道那些基本的语法,实际上已经可以写纯文本的博客了.对我们这群写代码的人或者将要写代码的人来说,貌似这些还不够,我们还希望能插 ...

  10. Swift基础之两指拉动图片变大变小

    我们在使用APP的时候,有时会发现有些图片可以通过两指进行放大.缩小,今天就实现这样的一种效果,比较简单,不喜勿喷.... var imageVi:UIImageView! = nil    var ...