132day(add two numbers)

本文探讨了一道链表相加的问题,给出了两种不同的解决方案。一种是使用递归的方式,另一种则是迭代方式实现。通过对比,展示了简洁高效的代码实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2018年2月20日》【连续132天】

标题:add two numbers;

内容:
看了一道题:

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order 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.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

给你两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点都包含一个数字。添加这两个数字并将其作为链接列表返回。

您可以假设这两个数字不包含任何前导零,除了数字0本身。(谷歌翻译,英文我看不懂的)

一开始以为直接对链表操作,发现是对它给的单链表进行操作:

 public class ListNode {
	    int val;
	    ListNode next;
	    ListNode(int x) { val = x; }
	 }

它是让你写一个函数,我是用递归解,解得太麻烦了,而且最后还写了两个递归函数:

 

class Solution {
       public ListNode addten(ListNode s)
	 	{
	 		if(s.val >=10)
		    {
		        s.val -=10;
		        if(s.next !=null)
		        	{
		        		s.next.val++;
		        		s.next=addten(s.next);
		        	}
		        else
		        {
		        	ListNode sum1 =new ListNode(1);
			        s.next =sum1;
		        }
		    }
	 		return s;
	 	}
	    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
	    	 	ListNode sum =new ListNode(0);
	    	 	boolean ide =false;
	    	 	sum.val =l1.val+l2.val;
	    	 	if(sum.val >=10)
			    {
			        sum.val -=10;
			        ListNode sum1 =new ListNode(1);
			        sum.next =sum1;
			        ide =true;
			    }
		        if(l1.next !=null && l2.next !=null)
		        {
				    sum.next =addTwoNumbers(l1.next,l2.next);
				    if(ide)
				    		sum.next.val++;
				    sum.next=addten(sum.next);
		    	}   
		        else if(l1.next !=null)
		        {
		        	sum.next =l1.next;
		        	 if(ide)
					    	sum.next.val++;
		        	 sum.next=addten(sum.next);
		        }
		        else if(l2.next !=null)
		        {
		        	sum.next =l2.next;
		        	 if(ide)
					    	sum.next.val++;
		        	 sum.next=addten(sum.next);
		        } 
		        return sum;
	    }
}

然后上网查找了一下别人的解法:
 

public class Solution {
     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         int carry=0;
         ListNode listNode=new ListNode(0);
         ListNode p1=l1,p2=l2,p3=listNode;
         while(p1!=null||p2!=null){
             if(p1!=null){
                 carry+=p1.val;
                 p1=p1.next;
             }
             if(p2!=null){
                 carry+=p2.val;
                 p2=p2.next;
             }
             p3.next=new ListNode(carry%10);
             p3=p3.next;
             carry/=10;
         }
         if(carry==1)
             p3.next=new ListNode(1);
         return listNode.next;  
     }
}

这里,对于数的加减直接是用了对carry的操作,并且让它有了位数上的传递,

因为起初listNode和p3是引用一个对象,而后来p3不停的引用next,从而让操作传递,

这里返回listNod.next是因为第一个操作的结果是p3.next的val;

读一读别人的代码,还是收获良多;

睡觉了;

 

<think>好的,我需要回答用户关于Hive中ADD_day函数的用法或实现的问题。首先,我需要确认Hive是否确实有这个函数。根据我的记忆,Hive通常使用日期函数如date_add,而不是ADD_day。可能用户记错了函数名称,或者混淆了其他SQL方言中的函数。 接下来,我应该检查Hive的官方文档或可靠的资料来确认。查阅Hive的日期函数列表,确实没有找到ADD_day函数,而常见的是date_add和date_sub。因此,用户可能指的是date_add函数。 然后,我需要详细说明date_add的用法,包括语法、参数、返回值和示例。例如,date_add接受一个起始日期和天数,返回加上指定天数后的日期。需要给出具体的示例,如date_add('2023-10-01', 5)会返回'2023-10-06'。 同时,如果用户需要减少天数,可以提到使用负数或date_sub函数,这样可以覆盖更多使用场景。另外,要注意日期格式的正确性,避免因格式问题导致错误。 还需要考虑用户可能的错误,比如函数名拼写错误,或者期望的功能是否真的由其他函数实现。例如,add_months函数用于月份加减,这可能也是用户混淆的一个点。 最后,生成相关问题,帮助用户进一步了解Hive的日期处理函数,比如如何格式化日期、转换时间戳等,这能提供更全面的帮助。</think>在Hive中,标准日期加减函数为`date_add`和`date_sub`,而非`ADD_day`。以下是具体实现方法: ### 1. `date_add`函数用法 **语法**:`date_add(string startdate, int days)` **功能**:将指定日期增加N天,返回格式为`yyyy-MM-dd`的字符串 **示例**: ```sql SELECT date_add('2023-10-01', 5); -- 返回'2023-10-06' ``` ### 2. 实现日期减法 两种等效方式: ```sql SELECT date_add('2023-10-06', -5); -- 使用负数 SELECT date_sub('2023-10-06', 5); -- 使用date_sub函数 ``` ### 3. 时间戳处理 若需处理精确到秒的时间戳,可结合`from_unixtime`和`unix_timestamp`: ```sql SELECT from_unixtime( unix_timestamp('2023-10-01 12:30:45') + (5 * 86400), 'yyyy-MM-dd HH:mm:ss' ); -- 返回'2023-10-06 12:30:45'[^1] ``` ### 4. 注意事项 - 输入日期必须符合`yyyy-MM-dd`格式 - 超过当月天数会自动进位(如`date_add('2023-02-28', 3)`返回`2023-03-03`) - 支持Hive 0.12.0及以上版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值