文章目录
- 1.第一题
- 1.1题目
- 1.2思路
- 1.3解题
- 2.第二题
- 2.1题目
- 2.2思路
- 2.3解题
1.第一题
1.1题目
描述:
nowcoder要和朋友交流一些敏感的信息,例如他的电话号码等。因此他要对这些敏感信息进行混淆,比如在数字中间掺入一些额外的符号,让它看起来像一堆乱码。
现在请你帮忙开发一款程序,解析从nowcoder那儿接收到的信息,读取出中间有用的信息
输入描述:
输入有多行
每一行有一段经过加密的信息(其中可能包含空格),并且原始信息长度不确定
输出描述:
输出每段信息中数字信息
1.2思路
- 遍历字符串,如果是数字就进行拼接
1.3解题
import java.util.*;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String str = sc.nextLine();StringBuffer sb = new StringBuffer();for(int i = 0;i < str.length();i++){if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){sb.append(str.charAt(i));}}System.out.println(sb);}}
}
2.第二题
2.1题目
描述:
NowCoder最喜欢游乐场的迷宫游戏,他和小伙伴们比赛谁先走出迷宫。
现在把迷宫的地图给你,你能帮他算出最快走出迷宫需要多少步吗
输入描述:
输入包含多组数据
每组数据包含一个10*10,由“#”和“.”组成的迷宫。其中“#”代表墙;“.”代表通路
入口在第一行第二列;出口在最后一行第九列
从任意一个“.”点都能一步走到上下左右四个方向的“.”点
输出描述:
对应每组数据,输出从入口到出口最短需要几步
2.2思路
- 采用广度优先遍历的方法找到出迷宫的最短路径
- 将入口放入队列,对该位置进行标记,只要队列不为空,从队列中取出当前位置,计算该位置的上、下、坐、右四个方向,计算要走的下一步;如果下一步在出口的位置,已经找到返回所走步数level;如果该位置有效且不是墙且没有走过将该位置入队列,再继续其他几个方向
2.3解题
import java.util.*;
class Node{public int x;public int y;public int level;public Node(){}public Node(int x,int y,int level){this.x = x;this.y = y;this.level = level;//该点距离入口的距离}
}
public class Main {// 求迷宫的最短路径public static int minLevel(String[] map,int m,int n){// 移动方向:下、右、左、上int[][] diect = {{1,0},{0,1},{0,-1},{-1,0}};// 存放出迷宫的最短路径Queue<Node> queue = new LinkedList<>();// 标记该位置是否走过boolean[][] flg = new boolean[m][n];// 定义起始位置和出口Node enter = new Node(0,1,0);Node out = new Node(9,8,0);// 将起始位置放入队列中queue.offer(enter);while(!queue.isEmpty()){Node cur = queue.poll();// 标记当前位置已经走过flg[cur.x][cur.y] = true;// 如果当前位置是出口,返回当前位置的levelif(cur.x == out.x && cur.y == out.y){return cur.level;}// 遍历当前位置的四个方向Node next = new Node();for(int i = 0;i < 4;i++){next.x = cur.x + diect[i][0];next.y = cur.y + diect[i][1];// 判断下一个位置是否合法且是通路且没有走过if(next.x >= 0 && next.x < m && next.y >= 0 && next.y < n && map[next.x].charAt(next.y) == '.' && !flg[next.x][next.y]){// 距离加1next.level = cur.level + 1;// 并将下一个位置放入队列中queue.offer(new Node(next.x,next.y,next.level));}}}return 0;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){String[] map = new String[10];// 接收每一行迷宫for(int i = 0;i < 10;i++){map[i] = sc.nextLine();}// 采用广度优先遍历的方法找到出迷宫的最短路径System.out.println(minLevel(map,10,10));}}
}