Algorithm
leetcode 第2题:两数之和
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路:可以转化为两数相加的公式,算出一个尾数和,就存进新链表中
/**
* 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) {
ListNode first = null;
ListNode last = null;
int w = 0;//定义进位变量,当w=0时,两数相加的值小于10不进位,否则w=1是进位
while (l1 != null || l2 != null) {
ListNode l = last;//定义节点变量存储链表最后一个值
int x;//定义变量存放两数相加的个位
if (l1 == null) {//说明只剩下l2链表
x = l2.val + w;
l2 = l2.next;
} else if (l2 == null) {//说明只剩下l1链表
x = l1.val + w;
l1 = l1.next;
} else {
x = l1.val + l2.val + w;
l1 = l1.next;
l2 = l2.next;
}
last = new ListNode(x % 10);
w = x / 10;
if (l == null) {//链表的一个节点
first = last;
continue;
}
l.next = last;
}
//w=1说明遍历结束后,还剩下一个进位 1
if (w == 1) {
ListNode newListNode = new ListNode(1);
last.next = newListNode;
}
return first;
}
}
用时10ms
内存消耗46.5MB
Review
Tip
使用idea刚建好的Springboot在进行打包时
没有跳过检查,每次打包时间挺长
跳过检查
这样再次打包就快了很多
Share
最近重构项目,以前使用的是dubbo,属于横向划分,web层和业务层之间用zookeeper调用,由于开发不太规范,整个业务层搞成了一个大项目,导致好多问题,比如,这个模块直接操作另个一个模块的数据库,扩展性比较差,代码冗余,都操作同一个业务层,有了新的功能,不能及时上线等等,现在整个改成了springcloud微服务架构,代码跑在容器里,自己管理自己的项目。
在使用springcloud推荐的Feign进行内部服务调用时,踩了坑,分享一下
在调用时,Feign接口get请求的参数是String非基本类型是,必须加@RequestParam 而且value值不能省略
get请求的参数是对象时,接口和controller层的对象必须加@RequestBody,否则会报不支持POST请求(纳尼~),另外加上一个Feign依赖(网上搜就行了),当然还有大牛把源码改掉的。
在调用返回后,接收参数时,是复杂类型对象,Feign为了使返回参数顺序一致,会把参数封装成LinkedHashMap,你进行强转时肯定会报错的,你必须要进行转JSON工具进行一下转换