leetcode(六)----递归


前言

递归

一、两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头

class Solution {
   
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode pre = new ListNode(0);
            ListNode cur =pre;
            int carry=0;
            while (l1!=null||l2!=null){
                int x =l1==null? 0:l1.val;
                int y =l2==null? 0:l2.val;
                int sum =x+y+carry;
                carry =sum/10;
                sum = sum%10;
                cur.next=new ListNode(sum);
                cur=cur.next;
                if(l1!=null){
                    l1=l1.next;
                }
                if(l2!=null){
                    l2=l2.next;
                }
            }
            if(carry==1){
                cur.next=new ListNode(1);
            }
            return pre.next;




}
}

二、合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

class Solution {

        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode pre = new ListNode(0);
            ListNode cur =pre;
            while (l1!=null&&l2!=null){
                if(l1.val<l2.val){
                    cur.next=l1;
                    l1=l1.next;
                }else {
                    cur.next=l2;
                    l2=l2.next;
                }
                cur=cur.next;

            }
            cur.next=l1==null?l2:l1;
            return pre.next;





}
}

三、Pow(x,n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。

class Solution {
    public double myPow(double x, int n) {
        long N =n;
        if(N>=0){
           return pow(x,N); 
        }else{
          return 1.0/pow(x,-N);  
        }
        

    }
    public double pow(double x,Long n){
        if(n==0){
            return 1.0;
        }
     
        double y=pow(x,n/2);
        return n%2==0? y*y:y*y*x;
    }
}

四、反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }



        ListNode cur=reverseList(head.next);
        head.next.next=head;
        head.next=null;



        return cur;
    }




}

五、回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

class Solution {
    ListNode tmp;
  public boolean isPalindrome(ListNode head) {
       tmp=head;
      return check(head);
   

}
    private boolean check(ListNode head){
        if(head==null){
            return true;
        }
        boolean res=check(head.next)&&(tmp.val==head.val);
        tmp=tmp.next;
        return res;
    }
}

六、3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

class Solution {
    public boolean isPowerOfThree(int n) {
        if(n==1){
            return true;
        }
        if(n==0){
            return false;
        }
        if(n%3!=0){
            return false;
        }
        return isPowerOfThree(n/3);

    }

七、反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

class Solution {
    public void reverseString(char[] s) {
        int a=0;
        int b =s.length-1;
        while(a<b){
            char tmp = s[a];
            s[a]=s[b];
            s[b]=tmp;
            a++;
            b--;
        }

        

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值