445. Add Two Numbers II(JAVA)

原題

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.

Example:

Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7


解題思路

先用棧儲存鏈表的數字,然後再把每位push出來計算其和,再推入另一個棧中。最後把結果存入鏈表中。


代碼

import java.util.*;


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        Stack<Integer> s1 = new Stack<Integer>(), s2 = new Stack<Integer>(), s3 = new Stack<Integer>();
        int count1 = 0, count2 = 0;


        while (l1 != null) {
            count1++;
            s1.push(l1.val);
            l1 = l1.next;
        }


        while (l2 != null) {
            count2++;
            s2.push(l2.val);
            l2 = l2.next;
        }
        
        if (count2 > count1) {
            count1 = count2;
        }
        
        
        boolean up = false;
        
        for (int i = 1; i <= count1; i++) {
            int num = 0;
            if (up == true) {
                num = 1;
                up = false;
            }
            
            if (!(s1.empty() || s2.empty())) {
                num += s1.pop() + s2.pop();
            }
            else if (s1.empty()) {
                num += s2.pop();
            }
            else {
                num += s1.pop();
            }
            
            if (num >= 10) {
                up = true;
                num -= 10;
            }
            
            s3.push(num);
        }
        
        if (up == true) {
            s3.push(1);
            count1++;
        }
        


        ListNode l3 = new ListNode(s3.pop()), l4;
        l4 = l3;
        for (int i = count1 - 2; i >= 0; i--) {
            l3.next = new ListNode(s3.pop());
            l3 = l3.next;
        }
        
        return l4;
    }
}



感想

這次我用了java來寫,因為這幾天一直在寫java,都有點忘了c++怎麼寫了。。。

這題挺簡單的,只要從最後一位開始往前算的好了,還有就是要注意進位,沒有甚麼難點。

内容概要:本文档提供了三种神经网络控制器(NNPC、MRC和NARMA-L2)在机器人手臂模型上性能比较的MATLAB实现代码及详细解释。首先初始化工作空间并设定仿真参数,包括仿真时间和采样时间等。接着定义了机器人手臂的二阶动力学模型参数,并将其转换为离散时间系统。对于参考信号,可以选择方波或正弦波形式。然后分别实现了三种控制器的具体算法:MRC通过定义参考模型参数并训练神经网络来实现控制;NNPC利用预测模型神经网络并结合优化算法求解控制序列;NARMA-L2则通过两个神经网络分别建模f和g函数,进而实现控制律。最后,对三种控制器进行了性能比较,包括计算均方根误差、最大误差、调节时间等指标,并绘制了响应曲线和跟踪误差曲线。此外,还强调了机器人手臂模型参数的一致性和参考信号设置的规范性,提出了常见问题的解决方案以及性能比较的标准化方法。 适合人群:具备一定编程基础,特别是熟悉MATLAB编程语言的研究人员或工程师,以及对神经网络控制理论有一定了解的技术人员。 使用场景及目标:①理解不同类型的神经网络控制器的工作原理;②掌握在MATLAB中实现这些控制器的方法;③学会如何设置合理的参考信号并保证模型参数的一致性;④能够根据具体的性能指标对比不同控制器的效果,从而选择最适合应用场景的控制器。 其他说明:本文档不仅提供了完整的实验代码,还对每个步骤进行了详细的注释,有助于读者更好地理解每段代码的功能。同时,针对可能出现的问题给出了相应的解决办法,确保实验结果的有效性和可靠性。为了使性能比较更加公平合理,文档还介绍了标准化的测试流程和评估标准,这对于进一步研究和应用具有重要的指导意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值