在如今的校招笔试环节,算法题是必不可少的部分,但是大多数公司的笔试,并非力扣那种核心代码的模式,是需要自己处理输入输出的。我身边人大多习惯了刷力扣,看到需要自己处理输入的题就顿时发懵了。因此,我在这俩写一份我目前能想到的,各种情况的输入,以及我处理这些输入的方式。如有更优雅的处理方式,也欢迎大家提出。
0.前置思想:
我们在读取输入的时候,默认是一行一行读,这样效率更快,可以用Scanner的nextLine()方法,也可以用BufferedReader的readLine()方法,我个人是习惯用BufferedReader。其次就是,这样读取的是字符串形式,如果要处理成数字,可以用Integer的parseInt()方法。PS:一行数据是多个数字,需要切分处理。
1.输入一个字符串:
比如验证回文串,输入只有一行字符串,这种最简单
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
}
}
2.输入一个数字:
比如跳台阶这种题,给你一个输入n,需要你输出结果,这种只需要简单转一下数字即可
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
bf.close();
}
}
3.输入一行数字:
比如给你一行数字 2 3 5 1 0,如果你需要把它转成数组的形式,这样做
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] sp = bf.readLine().split(" ");
int[] arr = new int[sp.length];
for (int i = 0; i < sp.length; i++) {
arr[i] = Integer.parseInt(sp[i]);
}
bf.close();
}
}
4.输入一个n,然后有n行数字(不知道有多少个):
比如:
3
1 2
1
1 2 3 4
这种题的话,我一般会用list去存了
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
List<List<Integer>> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] sp = bf.readLine().split(" ");
List<Integer> temp = new ArrayList<>();
for (String s : sp) {
temp.add(Integer.parseInt(s));
}
list.add(new ArrayList<>(temp));
}
bf.close();
}
}
5.第一行n m,然后n 行数据,每行m个:
比如:
3 3
1 2 3
4 5 6
7 8 9
我一般会用二维数组去存
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] sp = bf.readLine().split(" ");
int n = Integer.parseInt(sp[0]);
int m = Integer.parseInt(sp[1]);
int[][] arr = new int[n][m];
for (int i = 0; i < n; i++) {
sp = bf.readLine().split(" ");
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(sp[j]);
}
}
bf.close();
}
}
6.多行数据,不知道有几行:
比如:
asdsa
sdas
…
asdsa
循环读取即可
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s = bf.readLine()) != null){
//System.out.println(s);
}
bf.close();
}
}
这里小伙伴本地调试的时候,发现好像出现了死循环,我大概介绍下,在输入的时候,即使直接回车,也会读取到一个空字符串"",所以循环不会停下来。但是在笔试测试用例的时候,它是可以辨别到文件的最后一行,然后停止循环的。有兴趣的可以深入了解下。
常见的就以上几种,真实笔试中,可能会出现以上几种情况的结合,自己参考着,灵活应对即可