This repository is used to summarize all the leetcode algorithms that have been solved using Java Programming.
- 本项目意在收集 leetcode 中各大题型最清晰的解题思路 😉,帮助短时间内捋顺 Java 编程知识体系、掌握常规通用、简单有效的解题方法,理解并记忆一些避免代码冗余的黑科技模块。
- 由于之前都是使用CPP编程,但迫于现实原因,转向Java编程。因此代码或许解法或写法不是最优,但是代码会尽量减少冗余。另外,由于时间紧迫,可能只有少数题目会配套题解,但大多数题目都会有简洁的注释。
- 水平有限,若您发现已存在的代码中如有冗余部分,欢迎 issue 或 PR。
- 另外这里有一份 🐍 Python 最短题解,带您体验 python 中各种让人叹为观止的奇巧解法,如果您对俩门语言都感兴趣的话,同时服用效果更佳。
- 此外还有一份体量相对完善的Clearest-LeetCode-Cpp-Solutions,尽量使用不冗余的解法,用CPP解决leetcode官方探索题。目前已经基本完成了探索内的数据类型模块。
- 欢迎加入QQ交流群:902025048 群内提供更多相关资料,更有刷题大牛为你解答疑问~
- 推荐使用【Ctrl + F】按键搜索题号
- Leetcode Acccount: youlookdeliciousc
class Solution {
public int[][] transpose(int[][] A) {
int c = A.length, r = A[0].length;
int[][] B = new int[r][c];
for(int i = 0; i < c; ++ i){
for(int j = 0; j < r; ++ j){
B[j][i] = A[i][j]; //B[i][j] = A[j][i] 会超出索引。
}
}
return B;
}
}
- 这题目很简单,难在题目太过冗长。
能通过。
class SubrectangleQueries {
private int[][] rec = null;
public SubrectangleQueries(int[][] rectangle) {
this.rec = rectangle;
}
public void updateSubrectangle(int row1, int col1, int row2, int col2, int newValue) {
if(rec != null){
for(int i = row1; i <= row2; ++ i){
for(int j = col1; j <= col2; ++ j){
rec[i][j] = newValue;
}
}
}
}
public int getValue(int row, int col) {
if(rec != null){
return rec[row][col];
}
return -1;
}
}
- 暴力解法,每个平方完之后sort排序
class Solution {
public int[] sortedSquares(int[] A) {
for(int i = 0; i < A.length; ++ i){
A[i] = A[i] * A[i];
}
Arrays.sort(A);
return A;
}
}
- 双指针法
class Solution {
public int[] sortedSquares(int[] A) {
int l = 0, r = A.length-1, k = r;
int[] B = new int[A.length];
while(l <= r){
if(A[l] + A[r] > 0){
B[k--] = A[r] * A[r];
r--;
}else{
B[k--] = A[l] * A[l];
l++;
}
}
return B;
}
}
class Solution {
public String modifyString(String s) {
int len = s.length();
if(len == 1) return "a";
char[] schar = s.toCharArray();
for(int i = 0; i < len; i ++){
if(schar[i] == '?'){
if(i > 0 && i < len -1){
char temp = 'a';
schar[i] = temp;
while(schar[i-1] == temp || schar[i + 1] == temp){
schar[i] = ++ temp;
}
}else if(i == 0){
schar[i] = schar[i+1] == 'a' ? 'b': 'a';
}else{
schar[i] = schar[i-1] == 'a' ? 'b': 'a';
}
}
}
s = new String(schar);
return s;
}
}
- 这题我写得有点冗长,观评论区大佬有人直接用
while ( (i < s.size()-1 && s[i]==s[i+1]) || (i > 0 && s[i] == s[i-1]))
这一行代码可以缩减掉好几个if判断语句。
class Solution {
public boolean repeatedSubstringPattern(String s) {
return (s+s).substring(1,s.length()*2-1).indexOf(s)!=-1;
}
}
- 解析待添加