递归 1

递归原理

在递归过程中,函数将自身作为子例程调用。不断拆解为子问题,直到子问题无需进一步调用。

示例

  1. 以相反的顺序打印字符串
public static void mian(String[] args){
	recurrence(0,str);
}
public void recurrence(int index ,char[] str){
	if(str==null ||index>=str.length)
	return;
	help(index+1,str);
	//在index 未达到str.length时不执行输出 直到达到 满足if条件判断 返回,执行输出 str[str.length-1] 
	System.out.print(str[index]);

}

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

class Solution {
    public void reverseString(char[] s) {
          recurrence(0,s);
    }
    public void recurrence(int index,char[] str){
        if(str==null||index>=str.length){
            return ;
        }
        recurrence(index+1,str);
        //理解什么时候执行if语句 是关键.参照 eg 1
        if(index>=str.length/2){
       		int last=str.length-1-index;//-1很关键
        	char temp=str[last];//前后数原地交换
        	str[last]=str[index];
        	str[index]=temp;
        }
         System.out.print(str[index]);
    }
}
  1. 给定链表,交换每两个相邻节点并返回其头节点。

例如,对于列表 1-> 2 -> 3 -> 4,我们应当返回新列表 2 -> 1 -> 4 -> 3 的头节点。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        swap(head);
        return head;
    }
    public  void  swap(ListNode head){
        if(head==null||head.next==null){
            return ;
        }
        swap(head.next.next);
        int temp=head.next.val;
        head.next.val=head.val;
        head.val=temp;
    
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值