8月23日
771:Jewels and Stones
- 我的思路:字符串匹配。使用双重循环charAt(i)获取字符位置,判断S和J是否相同。运行结果耗时长。
- 优秀代码:
int count=0;
for(int i=0;i<S.length();i++){
char ch=S.charAt(i);
if(J.indexOf(ch)!=-1){//indexOf()方法获取字符ch在字符串J中第一次出现的位置
count++;
}
}
return count;
- 学习内容:
char charAt(int index) 用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
char toCharArray() 将此字符串转换为一个新的字符数组。
static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。
709. To Lower Case
- 学习内容:
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
804. Unique Morse Code Words
- 我的思路:
- 优秀代码:
- 学习内容:
8月24日
461. Hamming Distance
- 我的思路:x、y异或运算后转换成字符串,计算值为1的字符数目。
- 优秀代码:使用Integer.bitCount(x^y).
- 学习内容:Integer.bitCount(int i)返回i的二进制表示中值为1的个数。
832. Flipping an Image
- 我的思路:第一步根据数组坐标交换值,第二步然后更改0和1的值。
- 优秀代码:思路一样。第一种将两个步骤写成函数调用;第二种是将两个步骤合并一起或使用条件运算符。
for(int i = 0; i < A.length; i++) {
for(int j = 0; j < A.length; j++) {
reverse[i][A.length - 1 - j] = 1 - A[i][j];
}
}
- 学习内容:
条件运算符 a=x?b:c;//如果x为真,a=b;否则a=c;
657. Judge Route Circle
- 我的思路:我把这道题做成了字符串匹配,UD、LR都有即消除。
- 优秀代码:
//one
int alph[]=new int[26];
for(char c: moves.toCharArray()){
++alph[c-'A'];
}
return (alph['L'-'A']==alph['R'-'A'] && alph['U'-'A']==alph['D'-'A']);
//two
int x=0,y=0;
for(char c: moves.toCharArray()){
switch(c){
case 'U': y++;break;
case 'D': y--;break;
case 'L': x++;break;
case 'R': x--;break;
}
}
return (x==0)&&(y==0);
- 学习内容:要学会将难化易,看了别人的代码很简单变成算术题。长时间不写代码的代价啊,大二三的时候绝对这种题,哎~刚开始刷题,加油!
8月25日
617. Merge Two Binary Trees
- 学习内容:递归的使用。边界情况使用if判断,会节约时间。
852. Peak Index in a Mountain Array
- 我的思路:考虑到矩阵的山顶不一定靠近中间,使用顺序查找做的这道题,没有使用二分查找,但样例多时二分查找更快吧。