JAVA学习总结

一、力扣题

1、

思路:

1.创建一个新二维数组,用于存储变化后的结果

2.将先前的二维数组遍历,存储到新二维数组中,过程中遇到一则替换。

方法:

1.创建一个二维数组answer,且列数和行数和数组matrix相等;

2.遍历数组matrix并赋值给数组answer,当元素=-1时,选出本列最大的数进行赋值。

3.创建方法选出最大的数:需要此时的列数和行数,将本列第一个数赋值给max,然后对本列进行遍历和比较,若大于max,则赋值,遍历时若遇到本行的数则跳过。

4.返回数组answer

代码实现:

class Solution {
    public int[][] modifiedMatrix(int[][] matrix) {
       int m=matrix.length;
       int n=matrix[0].length;
        int[][] answer=new int[m][n];
        for (int i = 0; i < m; i++) {
            for(int j=0;j<n;j++){
                int num= matrix[i][j];
               if(num==-1){
                   num=maxNum(matrix,j,i);
               }
               answer[i][j]=num;
            }
        }
         return answer;
    }
    public static int maxNum(int[][] arr,int x,int f) {//x为列数
        int max=arr[0][x];
        for(int i=0;i<arr.length;i++){
            if(i==f)
                continue;
            if(arr[i][x]>max){
                max=arr[i][x];
            }
        }
        return max;
    }
}

2.

思路:

1、将字符串中的字符放入集合中,进行操作;

2、按照要求将不需要的字符删去;

3.将剩下的字符转为整数,并对其是否在范围内进行判断。

代码实现:

class Solution {
    public int myAtoi(String s) {
                if(s.length()==0)
        return 0;
        //字符串转为字符数组
        char[] arr = s.toCharArray();
        //建立集合
        ArrayList<Character> list = new ArrayList<>();
        ArrayList<Character> list1 = new ArrayList<>();
        //记录正负
        char symbol = ' ';
        //记录最终结果
        int result = 0;
        //将数组赋值给集合
        for (int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
        }
        //读入字符串并丢弃无用的前导空格
        while (list.size()!=0 && list.get(0) == ' ') {
            list.remove(0);
        }
        //检查下一个字符+-;
        if (list.size()!=0 &&list.get(0) == '-') {
            symbol = '-';
            list.remove(0);
        } else if (list.size()!=0 && list.get(0) == '+') {
            list.remove(0);
        }
        while (list.size()!=0 && list.get(0) == '0') {
            list.remove(0);
        }
        //创建整数集合
        ArrayList<Integer> list2=new ArrayList<>();
        //遍历剩余字符
        for (int i = 0; i < list.size(); i++) {
            char c = list.get(i);
            if (c >= '0' && c <= '9') {
                list2.add(list.get(i)-48);

            }else {
                break;
            }

        }
        //判断是否为空
        if(list2.size()==0){
            return 0;
        }
        //提取第一次循环
        result = result * 10 + list2.get(0);
        if (symbol == '-') {
            result = result * (-1);

        }
        //计算结果
        for (int i = 1; i < list2.size(); i++) {
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE/10 && list2.get(i) % 10 > 7)) {
               return Integer.MAX_VALUE ;
            }
            if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE/10 && list2.get(i) *(-1) < -8)) {
                return Integer.MIN_VALUE;
            }
            if(result<0)
            result = result * 10 - list2.get(i);
            if(result>0)
            result = result * 10 + list2.get(i);
        }

        return result;
    }
}

3、

思路:

从字符串的第一个字符开始寻找,记录从第一个字符开始的无重复子串长度,再从第二个字符寻找,直至最后一个,选出最长的无重复子串。

方法:

1、变量count记录每个字符串长度,变量max记录最长无重复子串,创建数组arr用于判断是否重复。

2.从第一个字符开始,遍历它本身及之后的字符,将遍历过的字符存入arr,将之后的字符与arr中字符对比,判断是否重复。若不重复则count+1,并将count与max比较,将字符存入arr;若重复则开始的二个字符的寻找,直到最后一个。

3.创建方法比较字符与数组arr中字符是否相同。

代码实现:

class Solution {
    public int lengthOfLongestSubstring(String s) {
         //创建一个字符数组
        char[] arr = new char[s.length()];
        //记录无重复字符串长度
        int count = 0;
        //记录最长回文子串
        int max = 0;
        //遍历每个字符
        for (int j = 0; j < s.length(); j++) {
            //遍历j及j之后的字符
            for (int i = j; i < s.length(); i++) {
                char c = s.charAt(i);
                //判断是否重复
                if (same(c, arr,count)) {
                    
                    //数组为空
                    for (int i1 = 0; i1 < count; i1++) {
                        arr[i1] = ' ';
                    }
                    count = 0;//计数归0
                     break;
                }
                arr[count] = c;
                count++;
                if (count > max) {
                    max = count;
                }
            }
        }
        return max;
    }
    public static boolean same(char c,char[] arr,int count){
        for (int i = 0; i <count; i++) {
            if(c==arr[i]){
                return true;
            }
        }
        return false;
    }
}

二、学习总结

一、字符串:

字符串创建后不可被覆盖;

.可根据字符数组、字节数组创建字符串。

字符串比较

boolen  equals()   完全一样是返回true

boolen  equalslgnoreCase()  忽略大小写

遍历字符串

char charAt(int index)   根据索引返回字符

int length()字符串长度

截取字符串

String substring(int  beginindex,int endindex)    包左不包右

String substring(int  beginindex) 截取至末位

replace(旧值,新值)   替换

StringBuilder

StringBuilder.append()   添加数据

StringBuilder.reverse()翻转内容

int length   长度

String toString()    转换为String

链式编程:当调用一个方法时,不需接收结果,直接调用其他方法。

StringJoiner

StringJoiner(间隔符号)  ||(间隔符号,开始符号,结束符号)

StringJoiner.add  添加数据

int length    返回长度

String toString()    转换为String

 二、集合

优点:

添加元素时会自动扩容

但不能直接存放基本数据类型,需变为包装类。

创建:

用泛型限定集合中数据类型

ArrayList<泛型>list=new ArrayList<>();

成员方法:

增:boolean add(E  e)

删:boolean remove(E  e)

                     remove(int index)根据索引删除

改:E  set(int index,E  e)根据索引修改

(可用于遍历)查:E  get(int index)

int size()  集合长度

包装类:

char->Character

int ->Integer

byte->Byte

short->Short

其余均大写

三、面向对象进阶

一、static(静态变量)

向量成员前加static,使之后创建对象均可共享。

静态方法:

(被static修饰的成员方法)

只能访问静态成员变量和成员方法,非静态方法可访问所有

无关键字this。

二、继承(extends)

public class 子类 extends 父类 {   

}

作用:两个类拥有相同内容,且子类是父类的一种,便可继承。

注:java不支持多继承,支持多层继承:

       Java中所有类直接或间接继承Object。

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值