刷题日记-ACM模式
leetcode用的属于核心代码模式,面试的时候有时候需要手撕代码,算法题需要用到一种ACM模式。
想不到该怎么写还是相当尴尬的。
整理一下ACM模式。
ACM模式
开头
1 | import java.util.*; |
这部分基本上是通用的部分
import java.util.*:是导入util库中所有类,后面用到的Scanner包括在里面
1 | public class Main { |
是Main主类类下的主函数,main函数的特定写法是
1 | public static void main (String[] args)//`简写为(PSVM) |
Scanner
Scanner的使用需要实例化
1 | Scanner in = new Scanner(System.in); |
实例化后用in作为对象进行操作
Scanner对象的方法
通用处理
全部当成字符串,然后变成字符串数组(java字符串确定就是固定的)(spilt拆分),然后视后面需求对应修改
1 | String[] parts = in.nextLine().spilt(" ");//1 2 3 4 用空格分开 |
如果前后有 “[ ]” ,需要对字符串进行切分
1 | String str = in.nextLine(); |
这是处理一句的,如果多行需要逐行遍历
1 | while (in.hasNextLine()) { |
在循环内调用 parts进行操作,例如转换为数组;
1 | while (in.hasNextLine()) { |
这里面是首先创建和parts等长的int []然后再逐个赋值,赋值用到方法 Interger.parseInt()
;
后面得到的结果是 nums 作为 int 的数组,后面可以对 int 数组操作。
有一个流处理的方案:
1 | import java.util.*; |
或者
1 | import java.util.*; |
用到 Java8 的流部分
1 | int[] arr = Arrays.stream(parts).mapToInt(Integer::parseInt).toArray(); |
输入流的应当是 Arrays
类型,所以String
要处理为String[]
,最后toArray
输出。
直接读数字
1 | int i = in.hasNextInt(); |
格式化输出
1 | String str = String.format(示例); |
输出字符串str
,格式化在format
进行
转换符 | 说明 | 示例 | 输出 |
---|---|---|---|
%s | 字符串 | “Hi,%s:%s.%s”, “王南”,“王力”,“王张” | Hi,王南:王力.王张 |
%c | 字符 | “字母a的大写是:%c %n”, ‘A’ | 字母a的大写是:A |
%b | 布尔 | “3>7的结果是:%b %n”, 3>7 | 3>7的结果是:false |
%d | 整数 | “100的一半是:%d %n”, 100/2 | 100的一半是:50 |
%f | 浮点 | “50元的书打8.5折扣是:%f 元%n”, 50* 0.85 |
50元的书打8.5折扣是:42.500000 元 |
%% | 百分比 | “上面的折扣是%d%% % n”, 85 | 上面的折扣是85% |
%n | 换行符 | ||
%tx | 时间与日期 |