1.给一个数组和目标值,求数组中和为目标值的所有组合,数组中每个值可以重复使用。
比如:数组【2,3,6,7】,目标值7
所有组合:【2,2,3】,【7】
package 复现代码;
import java.util.*;
/**
 * @Classname Main
 * @Description TODO
 * @Date 2020/12/20 13:31
 * @Created by xjl
 */
public class 目标值和dfs {
    static ArrayList list = new ArrayList();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int target = sc.nextInt();
        int[] num = new int[m];
        for (int i = 0; i < m; i++) {
            num[i] = sc.nextInt();
        }
        ArrayList res = combinationSum2(num, target);
        for (ArrayList li : res) {
            for (int i : li) {
                System.out.print(i + " ");
            }
            System.out.println();
        }
        System.out.println(res.size());
    }
    public static ArrayList combinationSum2(int[] num, int target) {
        ArrayList ls = new ArrayList();
        if (num == null || num.length == 0) {
            return list;
        }
        Arrays.sort(num);
        dfs(num, 0, target, ls);
        return list;
    }
    private static void dfs(int[] arr, int index, int sum, ArrayList ls) {
        if (sum < 0) {
            return;
        }
        if (sum == 0 && !list.contains(ls)) {
            list.add(new ArrayList(ls));
            return;
        }
        for (int i = index; i < arr.length; i++) {
            ls.add(arr[i]);
            dfs(arr, i + 1, sum - arr[i], ls);
            ls.remove(ls.size() - 1);
        }
    }
}
package 复现代码;
/**
 * @Classname 反转链表II
 * @Description TODO
 * @Date 2020/12/21 12:56
 * @Created by xjl
 */
public class 反转链表II {
    public class ListNode {
        int val;
        ListNode next;
        public ListNode(int val){
            this.val=val;
        }
    }
    public ListNode rever(ListNode head){
        if (head==null){
            return null;
        }
        ListNode pre=null;
        ListNode curr=head;
        while (curr!=null){
            ListNode future=curr.next;
            curr.next=pre;
            pre=curr;
            curr=future;
        }
        return pre;
    }
}

 
                 
    