leetCode 四叉树和两数求和笔记

 

四叉树考察了递归,我一直对递归的思想不是特别理解,最后还是看了其他人的题解才写出来。

具体是每次都比较两个四叉树的相同节点,

①如果两个都是叶子节点,且其中有一个的val为true;则返回该节点。若都是叶节点,但是其中一个是false,则返回另一个节点。

②如果两个节点都不是叶节点,则依次比较它们的相同位置节点;此处就是递归的地方,

③递归的终点是四个节点的返回都是叶节点并且它们的val相等,则返回其中一个val,合并为一个节点。 否则,必然不是只有一个节点,isLeaf=false,val自然也是false,四个对应的叶节点就是对应返回的叶节点。

class Solution {
    public Node intersect(Node quadTree1, Node quadTree2) {
        if(quadTree1.isLeaf && quadTree1.val) return quadTree1;
		if(quadTree2.isLeaf && quadTree2.val) return quadTree2;
		if(quadTree1.isLeaf && !quadTree1.val) return quadTree2;
		if(quadTree2.isLeaf && !quadTree2.val) return quadTree1;
		
		Node n1 = intersect(quadTree1.topLeft, quadTree2.topLeft);
		Node n2 = intersect(quadTree1.topRight, quadTree2.topRight);
		Node n3 = intersect(quadTree1.bottomLeft, quadTree2.bottomLeft);
		Node n4 = intersect(quadTree1.bottomRight, quadTree2.bottomRight);
		
		if(n1.val == n2.val && n1.val==n3.val && n1.val==n4.val && n1.isLeaf &&n2.isLeaf && n3.isLeaf && n4.isLeaf)
			 return new Node(n1.val, true, null, null, null, null);
		else
			return new Node(false, false, n1,n2,n3,n4);
    }
}

 

 

二,两数相加

这道题是中等难度,乍一看还比较简单,我感觉比上一道简单一点,写倒是写出来了,就是有些小bug,而且不够优化,改了改就改的不成样子了,,,

最后参考了题解,是真的简洁。

ListNode ree = new ListNode(0);
		  ListNode re = ree;
		
		  int index = 0;//进位
		  while(l1!=null || l2!=null)
		  {
			  int a = (l1!=null) ? l1.val : 0;
			  int b = (l2!=null) ? l2.val : 0;
			  int sum = a+b+index;
			  index = sum/10;
			  re.next = new ListNode(sum%10);
			  re = re.next;
             
			  if(l1!=null)	l1 = l1.next;
  			  if(l2!=null)	l2 = l2.next;
		  }
		  if(index>0)
			  re.next = new ListNode(index);
		  return ree.next;

这里先设置返回了两个ListNode,其中一个用来返回,这里我没想到。 还有一个是在相加的时候,re的next节点的设置,要先初始化节点在re=re.next. 是我的语言问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值