[66] Plus One
来源:互联网 发布:工作室软件 编辑:程序博客网 时间:2024/06/05 19:54
1. 题目描述
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.
给定一个数组,数组每一位都是一个0-9的数字,给这个数组加1。如{1,2,3,4,5} -> {1,2,3,4,6}。
2. 解题思路
这个题主要就是考察进位的问题,十进制的进位制度大家都知道,当当前最后一位是9的时候加1向前进位,不是9就直接在最后一个数字上加1。那么简单的思想就是使用一个循环,从后面往前逐级进位就好了,但是这时候就有一个问题,当数字为9,99,999等等全是9的数字时,进位产生的数组长度是会加1的,也就是从{9,9,9}->{1,0,0,0},这样就需要将数组扩容1位,也就需要进行判断和复制操作。判断时我使用了判断第一位是否为0且是否之前进位到了第1位的方式,其实也可以使用一个flag,在循环内部停止进位时标记为true,之后在外面直接进行判断即可。
3. Code
public class Solution { public int[] plusOne(int[] digits) { // 从后往前进位 int i; for(i = digits.length - 1; i >= 0; --i) { if(digits[i] != 9) { digits[i] += 1; break; } digits[i] = 0; } // 如果第一位也产生进位生成一个新的长度加1的数组 if(i == -1 && digits[0] == 0) { int [] newDigits = new int[digits.length + 1]; newDigits[0] = 1; // 第一位设为1 // 后面为设为进位完的原数组 // public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length); System.arraycopy(digits, 0, newDigits, 1, digits.length); // 使用自带的拷贝函数 /*for(int j = 0; j < digits.length; ++j) { newDigits[j+1] = digits[j]; }*/ digits = newDigits; } return digits; }}
0 0
- leetcode 66 Plus One
- [leetcode 66] Plus One
- 66、Plus One
- [LeetCode 66]Plus One
- leetcode ||66、 Plus One
- leetcode-66 plus one
- LeetCode 66 Plus One
- Plus One - LeetCode 66
- leetcode-66 Plus One
- #66 Plus One
- Leetcode[66]-Plus One
- 【leetcode】【66】Plus One
- leetcode[66]:Plus One
- leetcode-66-Plus One
- 66Plus One
- leetcode 66:plus one
- Leetcode# 66 Plus One
- leetcode 66: Plus One
- 模仿百度地图登陆功能的遮罩层的实现
- Android实训案例(七)——四大组件之一Service初步了解,实现通话录音功能,抽调接口
- 欢迎使用CSDN-markdown编辑器
- 初学移动web,纠结选择框架的问题
- Linux 命令
- [66] Plus One
- PHP开发者应了解的24个库
- Node.js 获取客户端IP
- liunx下使用yum安装mysql5.6
- JavaScript强化教程——DOM编程(两种控制div移动的方法)
- 4.1、JS——认识js 语法规范 获取元素 输出 弹窗
- UITextField的leftView属性
- Django同步Mysql
- IOS学习笔记 (一)类型输出