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);
}
}
}
2018_今日头条春招(第2题字符串叠加,BFS)
最新推荐文章于 2020-08-19 13:59:57 发布