[LC] 66. Plus One
来源:互联网 发布:知英日剧 编辑:程序博客网 时间:2024/05/16 02:09
一、问题描述
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
二、我的思路
就像列竖式做加法一样,一个int add记录当前位是否要加,如果add位是0的话,就停止加法。
代码如下,在最高位进位的地方借鉴了discuss里的技巧:
class Solution { public int[] plusOne(int[] digits) { int add = 1; for(int i = digits.length - 1; i >= 0; i --){ if(add != 1){ break; } if(digits[i] == 9){ digits[i] = 0; add = 1; } else{ digits[i] += 1; add = 0; } } if (digits[0] == 0) { int[] res = new int[digits.length+1]; res[0] = 1; return res; } return digits; }}
三、淫奇技巧
1)
public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >=0; i--) { if (digits[i] != 9) { digits[i]++; break; } else { digits[i] = 0; } } if (digits[0] == 0) { int[] res = new int[digits.length+1]; res[0] = 1; return res; } return digits;}很好的利用了题目假设。题目假设最高位不会是0,除非这个数就是0。
在做完加法以后,判断最高位是否进位了。如果最高位是0,说明之前这个数是9999...9, 加一以后后面的数字全部是0. 所以只需要在最高位补1即可。
另外相比我的加法计算方法,人家写的太简洁了!!
2)和上面的相同的思路,不过更绝~
public int[] plusOne(int[] digits) { int n = digits.length; for(int i=n-1; i>=0; i--) { if(digits[i] < 9) { digits[i]++; return digits; } digits[i] = 0; } int[] newNumber = new int [n+1]; newNumber[0] = 1; return newNumber;}
四、举一反三
如果不是加1而是加n呢?加法运算部分if判断条件也要改变一下。最后的淫奇技巧就不能用了。是否可以改变下条件继续神奇呢?如果动态调整的话怎么办呢?(to be continued。。。)
五、碎碎念
简单的题目,还是能看出很大的差距呀~继续加油!
阅读全文
0 0
- [LC] 66. Plus One
- [LeetCode]66.Plus One
- LeetCode --- 66. Plus One
- [Leetcode] 66. Plus One
- [leetcode] 66.Plus One
- 66. Plus One
- 66. Plus One
- [leetcode] 66. Plus One
- Leetcode-66. Plus One
- 【leetcode】66. Plus One
- 66. Plus One
- 66. Plus One LeetCode
- 66. Plus One
- 66. Plus One
- 66. Plus One
- 66. Plus One
- 66. Plus One
- 【LeetCode】66. Plus One
- SpringMVC数据验证
- bzoj3339: Rmq Problem
- array_search()的不严格检测问题
- FAST特征点检测&&KeyPoint类
- 计算天数差的函数,通用
- [LC] 66. Plus One
- Opencv 基本操作
- python学习---第八天
- virtualbox 与vmware 之为什么我放弃了virualbox
- jquery操作select下拉框的多种方法(选中,取值,赋值等)
- redis4.0、codis、阿里云redis 3种redis集群对比分析
- 在 windows 安装 Jekyll
- 自己写的一个CircleImageView
- ubuntu安装无线网卡驱动