算法

这篇博客探讨了计算机科学中的递归算法,包括使用斐波那契数列思想来寻找子集以及整数划分问题的解决方法。通过全排列的实现展示了如何构建排列树,并提供了多行输入的处理策略。同时,文章还介绍了如何在处理复杂数据结构时使用ArrayList存储和转换数据。
摘要由CSDN通过智能技术生成

全排列

全排列n个元素就有n个分枝。
这玩意也叫排列树。
在这里插入图片描述
在这里插入图片描述

public class Perm {
    public static void swap(int[] arr,int k,int j){
        int tmp=0;
        tmp =arr[k];
        arr[k]=arr[j];
        arr[j]=tmp;
    }
    public static void perm_idea(int[] arr,int k,int m){
        if (k==m){
            for (int a:arr) {
                System.out.print(a);
            }
            System.out.println();
        }else {
            for (int j=k;j<=m;j++){
                //我认为这个思想最重要的就是这个j交换的起始位置就是的从K开始。
                swap(arr,j,k);
                perm_idea(arr,k+1,m);
                swap(arr,j,k);
                交换两边是因为这是对同一个数组操作,再递归回退以后要重新对原数组交换,所以要把数组换成原来的数组
            }
        }
    }
    public static void main(String[] args) {
        int[] arr ={1,2,3};
        perm_idea(arr,0,arr.length-1);
    }

斐波那契

在这里插入图片描述

找真子集的思想

在这里插入图片描述
递归是深度递归,但是分析要分层分析(一行一行的画图)
在这里插入图片描述

    public static void line(int[] arr,int[] brr,int i,int n){
        if (i>=n){
            for (int j=0;j<arr.length;j++){
                if (brr[j]==1){
                    System.out.print(arr[j]);
                }
            }
            System.out.println();
        }else {
            brr[i]=0;

            line(arr,brr,i+1,n);
            brr[i]=1;
            line(arr,brr,i+1,n);
        }

    }
    public static void main(String[] args) {
        int[] arr= {1,2,3};
        int[] brr ={0,0,0};
        line(arr,brr,0,3);
    }

整数划分

在这里插入图片描述
在这里插入图片描述

解决多行输入

用hasnext输入 ,再while代码里直接调用执行函数。

可以用Arraylist去存储

也可以用ArrayList<String[]>去存储数组

可以用spilt将空格分开

将String转为Iterge类型用Interge.parseInt();

对于有空格也有逗号的可以连着先replace“ ”,“”然后split

String[] group_str_arr= group_str.replace(" ","").split(",");
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int cur = in.nextInt();
            //将整数转化为String
            String binStr = Integer.toBinaryString(cur);

            //求字符串中的子串
            int[] res = getNum(binStr);
            System.out.println(binStr+" "+res[0]+" "+res[1]);
        }
    }
public static int[] exchanged(String[] arr){
        int l =arr.length;
        int[] ar =new int[l];
        for (int i=0;i<l;i++){
            ar[i]=Integer.parseInt(arr[i]);
        }
        return ar;
    }
    public static void main(String[] args) {
        ArrayList<String []>  al =new ArrayList<>();
        ArrayList<Integer> flag=new ArrayList<>();
        Scanner in =  new Scanner(System.in);
        int i= 0;
        while(in.hasNext()){
            String str = in.nextLine();
            String[] arr =str.split(" ");
            for (String a:arr
             ) {
                System.out.print(a);
                }
            System.out.println();
            System.out.println(arr[2]);
            al.add(arr);
            System.out.println(al.size());
            int[] num =exchanged(al.get(i++));
            if (num[0]==1){
                flag.add(1);
            }else {
                flag.add(0);
            }
            System.out.println(flag.size());
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值