1、广度优先遍历
思路:
https://www.nowcoder.com/questionTerminal/5ee8df898312465a95553d82ad8898c3
代码:
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
long x_0 = sc.nextLong();
//存储已经访问过的点
Map<Long, Integer> map = new HashMap<Long, Integer>();
//BFS(广度优先搜索)
Queue<Long> queue = new LinkedList<Long>();
map.put(x_0, 1);
queue.offer(x_0);
int result = -1;
while(!queue.isEmpty()){
Long value = queue.poll();
if(value==0 && map.get(value)<=100001){
result = map.get(value) - 1;
break;
}
if(map.get(value)>100001){
continue;
}
Long temp = (4*value+3)%1000000007;
if(!map.containsKey(temp)){
map.put(temp, map.get(value)+1);
queue.offer(temp);
}
temp = (8*value+7)%1000000007;
if(!map.containsKey(temp)){
map.put(temp, map.get(value)+1);
queue.offer(temp);
}
}
System.out.println(result);
}
}
}