【BFS】【递推】【Java】字节跳动2018.3笔试T2

本文介绍了一种通过广度优先搜索实现的字符串拼接算法,旨在寻找将初始字符串通过最少的操作步骤达到指定长度的方法。文章提供了完整的Java实现代码,包括使用队列进行节点扩展和记录最短路径的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义两个字符串变量:sm,再定义两种操作, 
  
第一种操作:

m = s
s = s + s
第二种操作:

s = s + m
  
假设sm初始化如下:

s = "a"
m = s
求最小的操作步骤数,可以将s拼接到长度等于n

class Nodes{
    int s;
    int m;
    public Nodes(){

    }
    public Nodes(int s,int m){
        this.s=s;
        this.m=m;
    }
}
public class BFS {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        Nodes nodes=new Nodes(1,1);
        Map<Nodes,Integer> map=new HashMap<Nodes,Integer>();
        map.put(nodes,0);
        Queue<Nodes> queue=new LinkedList();
        queue.add(nodes);
        while (!queue.isEmpty()){
            Nodes nodes1=queue.poll();
            if (nodes1.s==n){
                System.out.println(map.get(nodes1));
                break;
            }
            Nodes left=new Nodes();
            left.m=nodes1.s;
            left.s=nodes1.s*2;
            map.put(left,map.get(nodes1)+1);
            queue.add(left);
            
            Nodes right=new Nodes();
            right.s=nodes1.s+nodes1.m;
            right.m=nodes1.m;
            map.put(right,map.get(nodes1)+1);
            queue.add(right);
        }

    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值