算法
不要为了提高一点效率而复杂化思路
尤其不要为了简化几个判断,把思路搞复杂
在没有‘数量级’效率问题时,因该注重程序的可理解性
不要为了简化代码而复杂了思路
简化代码是程序正确后该做的事情
尽量不要拷贝代码
相似流程的代码总是习惯拷贝,之后修改其中的变量,这很容易出错
其实再写一遍好处很多,一方面加深了思考,同时做了代码review
典型案例
Leetcode#71
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”
public String simplifyPath(String path) {
// Start typing your Java solution below
// DO NOT write main() function
if(path==null)
return null;
String[] names = path.split("/");
// 这里使用栈这种结构在好不过了,当初为什么还想直接使用StringBuilder??
// 合适的数据结构就要用,不要觉得数据结构用的少才好,只要能够帮助正确编写程序,增加程序可读性,就要大胆用
Stack<String> st = new Stack<String>();
for(String name:names){
if(name.length()>0 && !name.equals(".")){
if(name.equals("..")){
if(!st.isEmpty())
st.pop();
}else{
st.push(name);
}
}
}
// 幸好这里直接用StringBuilder了,没有想到用字符串简单拼接==!
StringBuilder res = new StringBuilder();
// 开始就没有注意到要‘顺序’遍历栈,为什么没想到!!!
// 太粗心了,如果那个例子,画个图还会出错么??!!
for(int i=0; i<st.size(); i++){
res.append("/").append(st.get(i));
}
//考虑输出为空的情况
if(res.length()==0)
res.append("/");
return res.toString();
}
Others
数学里有最重要的五个常数:
“1”,是实数中最基本的单位,是数字的始祖。远古人类能抽象出1这个概念的时候,便是数学的真正萌芽。1可以代表整个宇宙,这就是所谓“浑一”。
“0”,最原始的意思是:什么都没有,nothing
“π”,圆周率,无限不循环小数3.14…
“e”,自然对数的底,无限不循环小数2.71…
“i”,虚数单位,是“-1”的平方根
欧拉发现一个公式: (e
的iπ
次方加1
等于0
)