2018_今日头条春招(第2题字符串叠加,BFS)

package 实习面试笔试题;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Today_Main2 {
    //给定字符串s=a,m=s
    //分别有两种操作,1:m=s,s=s+s 2:s=s+m
    //思路:类似二叉树,分别有两种不同的选择,那么我们只需要广度优先遍历,定义一个大小为3的数组
    //【左孩子为1操作的值,右孩子为操作2的值,对应高度
    //根节点的高度为0

    //输入:一个n表示s的字符串长度
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int len=sc.nextInt();

        Queue <int[]> qu = new LinkedList <>();
        //将根节点放入
        int [] root={1,1,0};
        qu.add(root);
        while (!qu.isEmpty()){
            //只要不为空,则把结果放入
            int[] cur = qu.poll();
            if(cur[0]==len){
                //说明找到满足length的,返回高度
                System.out.println(cur[2]);
                break;
            }

            //定义左孩子(操作1)
            int [] left=new int[3];
            left[0]=cur[0]*2;
            left[1]=cur[1];
            left[2]=cur[2]+1;

            //入队
            qu.add(left);

            //定义右孩子(操作2)
            int [] right=new int[3];
            right[0]=cur[0]+cur[1];
            right[1]=cur[1];
            right[2]=cur[2]+1;
            qu.add(right);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值