算法编程(二):加一

简介: 算法编程(二):加一

写在前面


今天我们来学习另外一道难度定义为简单的LeetCode算法题:《加一》。

这道题确实一看就懂,就是一个算法题嘛。下面就来看看我的解题思路吧。

image.png

题目解读


从这道题目上来看,是可以通过基本运算搞定的,但是题目中给出的数组长度在1到100之间。

这就说明了只是单纯的将数组中的值输出成整数后加1,然后再转换成数组的方式行不通,因为一个整数的位数根本到不了100位。

所以,根本不能偷懒了,就可以靠着遍历数组,当然了,要倒着遍历,从最开始的加1,就可以实现逐一进位的作用了。

这其中最重要的一个特殊情况,就是最后的数组可能会比原数组的长度大一,因为随着数字进位,可能会多出一个1来。

那么如何解决这个问题,我是进行了单独处理,通过中间值来判断了一下,如果遍历完原数组后,还存在进位情况,就新建一个数组,将首位设置成1,从第二位开始,将原数组直接复制过来即可得到最终结果。

代码实现


这是我的代码实现,大家可以看一下。

public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(Arrays.toString(solution.plusOne(new int[]{1, 2, 3})));
    }
    public int[] plusOne(int[] digits) {
        boolean flag = false;
        for (int i = digits.length - 1; i >= 0; i--) {
            int n = digits[i];
            if(i == digits.length - 1){
                if(n == 9){
                    digits[i] = 0;
                    flag = true;
                }else{
                    flag = false;
                    digits[i] = n + 1;
                }
            }else if(flag){
                if(n == 9){
                    digits[i] = 0;
                }else{
                    digits[i] = n + 1;
                    flag = false;
                    break;
                }
            }
        }
        if(flag){
            int[] r = new int[digits.length + 1];
            r[0] = 1;
            System.arraycopy(digits, 0, r, 1, r.length - 1);
            digits = r;
        }
        return digits;
    }
}

代码执行结果


还是挺给力的,内存方面的问题,总是避免不了。

image.png

总结


进位逻辑,只要搞清了这一点,也就没什么问题了。


相关文章
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
31 0
火山中文编程 -- MD5算法和SHA算法
|
2月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
54 0
|
2月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
43 0
|
2月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
53 1
|
2月前
|
存储 分布式计算 算法
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
【底层服务/编程功底系列】「大数据算法体系」带你深入分析MapReduce算法 — Shuffle的执行过程
45 0
|
22天前
|
机器学习/深度学习 算法 搜索推荐
编程之舞:探索算法的优雅与力量
【6月更文挑战第10天】在软件的世界里,算法是构筑数字宇宙的基石。它们如同精心编排的舞蹈,每一个步骤都充满着逻辑的美感和解决问题的力量。本文将带领读者走进算法的世界,一起感受那些精妙绝伦的编程思想如何转化为解决现实问题的钥匙。
18 3
|
9天前
|
人工智能 算法 搜索推荐
Java算法编程详解和程序实例
Java算法编程详解和程序实例
15 0
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
84 0
|
24天前
|
算法 安全 数据挖掘
解锁编程之门:数论在算法与加密中的实用应用
解锁编程之门:数论在算法与加密中的实用应用
|
2月前
|
设计模式 算法 Java
如何在面试中应对编程与算法面试?
面试中,编程能力至关重要,主要分为三个层次:初级关注基本功,如语法、原理和常见问题解决;高级涉及数据结构与算法,基础算法如排序对中小厂重要,大厂则需深入数据结构;资深专家层次需精通设计模式,以保证代码的扩展性和维护性。提升编程技能可采用PDCA循环学习法,从计划到执行、检查、行动不断迭代。通过实践项目如开发后端系统、测试框架来检验学习成果,并逐步学习算法和设计模式。坚持不懈的努力和重构将助你成为技术专家。记住,超越大多数人的关键在于持续学习和专注深耕。
16 0
如何在面试中应对编程与算法面试?