每周完成一个ARTS:
Algorithm:每周做一个 leetcode 的算法题
Review:阅读并点评写作一篇英文技术文章
Tip:学习至少一个技术技巧
Share:分享一篇有观点和思考的技术文章。
leetcode 表示数值的字符串
题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
部分数值列举如下:
"+100", "5e2", "-123", "3.1416", "-1E-16", "0123"
部分非数值列举如下:
"12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"
输入:s = "0"
输出:true
public class 剑指Offer_20_表示数值的字符串 {
public static void main(String[] args) {
String s1= "5e2";
String s2= "1a3.14";
System.out.println(s1+", result:"+ isNumber(s1));
System.out.println(s2+", result:"+isNumber(s2));
}
public static boolean isNumber(String s) {
Map[] states = {
new HashMap<Integer, Integer>(){{put(0,0); put(1,1); put(2,2); put(3,4);}}, // 0 > 0,1,2,4
new HashMap<Integer, Integer>(){{put(2,2); put(3,4);}}, // 1 > 2,4
new HashMap<Integer, Integer>(){{put(2,2); put(3,3); put(4,6); put(0,9);}}, // 2 > 2,3,6,9
new HashMap<Integer, Integer>(){{put(2,5); put(4,6); put(0,9);}}, // 3 > 5,6,9
new HashMap<Integer, Integer>(){{put(2,5);}}, // 4 > 5
new HashMap<Integer, Integer>(){{put(2,5); put(4,6);put(0,9);}}, // 5 > 5,6,9
new HashMap<Integer, Integer>(){{put(1,7); put(2,8);}}, // 6 > 7,8
new HashMap<Integer, Integer>(){{put(2,8);}}, // 7 > 8
new HashMap<Integer, Integer>(){{put(2,8); put(0,9);}}, // 8 > 8,9
new HashMap<Integer, Integer>(){{put(0,9);}}, // 9 > 9
};
char[] chs = s.toCharArray();
int stateId = 0; // 初始状态视为 0 ,即「开始空格」
for(char c : chs){
int typeId = type(c);
if(!states[stateId].containsKey(typeId)) return false; // 无状态对应的类型
stateId = (int) states[stateId].get(typeId); // 状态转移
}
return stateId == 2 || stateId == 3 || stateId == 5 || stateId == 8 || stateId == 9;
}
private static int type(char c){
if(c == ' ') return 0; // 0: ' '
else if(c == '+' || c == '-') return 1; // 1: '+/-'
else if(c - '0' >= 0 && c - '0' <= 9) return 2; // 2: digit
else if(c == '.') return 3; // 3: '.'
else if(c == 'e' || c == 'E') return 4; // 4: 'e/E';
else return -1; // 5: 非法字符
}
}
Stop Using TODO for Everything
一般写代码时会使用TODO注解,表示待完成的任务。
本文作者建议:停止在代码所有地方都使用TODO注释,而是使用更加具体的任务注解。如用“BUG”表示有个bug待修复、用“TESTME”表示添加测试。
整理Intellj IDEA(Mac版)使用频率比较高的快捷键,可以提高编程效率。
类结构和关系
Ctrl + H, 显示类的层次结构, 可查看父类, 查看某个类的子类 command+ F12, 弹窗显示当前类的结构、函数、方法等信息 Command+ B, 查看类的引用
查找
2次shift, 查找弹窗 Command + E, 最近打开文件 Command + shift + O, 快速查找文件,类似2次shift command+shift+删除键 回到上一次编辑修改位置
编辑代码
ctrl+command +o 优化导入import包 command+ alt +l 格式化代码 Ctrl+Shift+u 字符大小写的快速切换
收藏夹和书签
Shift+ Alt + F, 快速添加到收藏夹 command+ 2 打开收藏夹
代码管理
Ctrl + V 自带版本管理弹窗,快速提交git Command+ D 任意选择2个文件,可进行对比
idea配置
command + , 打开project structure, 配置preference command + ; 打开project structure
编辑文件
鼠标放到指定包上,Command + N, 新建类 新建测试类,command + shift + t
Win10系统及Mac更多快捷键,可以查看IDEA自带参考文档,菜单栏->帮助->快捷键参考。
另外,可以安装插件"Key Promoter X",点击操作时会提示相关的快捷键。
现在云服务器很火,买了云服务器还没有用起来的同学,可以考虑搭建自己的Git服务器。
PS:腾讯云服务器新人有优惠
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。