leetcode刷题工具

前言

自己把leetcode的一些基础知识对应的题目总结下来放在了gitee上,希望对大家有帮助。
另外自己写了一些方便大家使用自己的IDE进行调试的工具,也放在了下面。

工具

由于使用leetcode直接写代码,调试的时候总是需要排队,所以个人还是比较喜欢使用IDE进行编码的。但是由于leetcode的数据的格式不能直接复制粘贴,所以写了一些工具进行转化。

字符串转化成数组

  • 把字符串转化成列表(String类型和int类型)
  • 把字符串转化成一维和二维数组(String和int类型)。

由于leetcode中最常见的就是String和int类型的二维数组。所以写一个转换,方便输入数据的时候进行直接复制粘贴,不用在手动转换了。

package leetcode.utils;

import java.util.ArrayList;
import java.util.List;

/*
*
*   leetcode中的数组转换成实际的数组
*
* 1. 算法过程
* 2. 如何设计着个代码? 是否要让idx成为全局变量,并且是静态的
* 3. 辅助函数changeToList是否应该使用static
*
* 很多设计上面的问题
* 1. 如何返回数组,而不是List, 转化成1维,2维,还是其他维。
* 2. 返回的怎么是Integer类型的,最后一维
*
* */
public class ChangeToArrayOrList {
    private static int idx;
    private ChangeToArrayOrList() {}  // 不提供构对象,只提供方法
    @SuppressWarnings("unchecked")
    private static List changeToIntList(char[] chars) {
        List list = new ArrayList();
        if (chars[idx] == '[') {
            while(idx < chars.length && chars[idx] == '[') {
                idx++;                             // 去掉左括号
                List nlist = changeToIntList(chars);
                list.add(nlist);
                while(idx < chars.length && (chars[idx] == ']' || chars[idx] == ','))
                    idx++;                             // 去掉逗号和右括号
            }
        } else {                                        // 字母
            while(idx < chars.length && Character.isDigit(chars[idx])) {
                StringBuilder b = new StringBuilder();
                while(Character.isDigit(chars[idx])) {
                    b.append(chars[idx]);
                    idx++;
                }
                list.add(Integer.valueOf(b.toString()));
                idx++;                          // 逗号和右括号去掉
            }
        }
        return list;
    }
    @SuppressWarnings("unchecked")
    private static List changeToStringList(char[] chars) {
        List list = new ArrayList();
        if (chars[idx] == '[') {
            while(idx < chars.length && chars[idx] == '[') {
                idx++;                             // 去掉左括号
                List nlist = changeToStringList(chars);
                list.add(nlist);

                while(idx < chars.length && (chars[idx] == ']' || chars[idx] == ','))
                    idx++;                             // 去掉逗号和右括号
            }
        } else {                                    // 字符串
            while(idx < chars.length && (Character.isLetter(chars[idx]) || chars[idx] == '\"')) {
                StringBuilder b = new StringBuilder();
                while(Character.isLetter(chars[idx]) || chars[idx] == '\"') {
                    b.append(chars[idx]);
                    idx++;
                }
                list.add(b.toString());
                idx++;                          // 逗号和右括号去掉
            }
        }
        return list;
    }

    /*
    *
    *   转化成int类型的列表
    *   1. 保证必须是列表类型的字符串
    *   1.1 一定含有[]结构,并且是关闭的
    *   1.2 一定是以 ']'结尾代表,而不是以 ','结尾
    *   1.3 其中的变量一定是int类型而不是String类型
    *
    * */
    public static List changeToIntList(String s) {
        s = s.replace(" ", "");
        idx = 0;

        // 这里需要先验证是否符合上面两条数据,如果不符合直接返回
        if (s.length() == 0)
        {
            throw new RuntimeException("不是正确的数组类型啊,亲");
        }

        List list = changeToIntList(s.toCharArray());
        return (List)list.get(0);
    }

    public static List changeToStringList(String s) {
        s = s.replace(" ", "");
        idx = 0;

        // 这里需要先验证是否符合上面两条数据,如果不符合直接返回
        if (s.length() == 0)
        {
            throw new RuntimeException("不是正确的数组类型啊,亲");
        }
        List list = changeToStringList(s.toCharArray());
        return (List)list.get(0);
    }



    public static int [] changTo1DIntArray(String s) {
        s = s.replace(" ", "");
        List list = changeToIntList(s);
        if (list == null) {
            throw new RuntimeException("必须保证是一维数组啊,亲");
        }
        int [] ans = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            ans[i] = (Integer) list.get(i);
        }
        return ans;
    }

    /*
    *
    *   转换成int类型的二维数组
    *
    * 1. 保证每一维的大小相同
    * 2. 保证一定是二维的
    * 3. 保证不为空
    * */

    public static int[][] changeTo2DIntArray(String s) {
        s = s.replace(" ", "");
        List list = changeToIntList(s);
        if (list == null || list.size() == 0) {
            throw new RuntimeException("必须保证是二维数组啊,亲");
        }
        List list1 = (List)list.get(0);
        int m = list1.size(), n = list.size();
        int[][] ans = new int[n][m];
        for (int i = 0; i < n; i++) {
            list1 = (List)list.get(i);

            if (list1.size() > m) {
                throw new RuntimeException("数组越界了啊,亲,必须保证维度相同啊");
            }
            for (int j = 0; j < m; j++) {
                ans[i][j] = (Integer) list1.get(j);
            }
        }
        return ans;
    }

    public static String[] changeTo1DString(String s) {
        s = s.replace(" ", "");
        List list = changeToStringList(s);
        if (list == null) {
            throw new RuntimeException("必须保证是一维数组啊,亲");
        }
        String[] ans = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            ans[i] = (String) list.get(i);
        }
        return ans;
    }
    public static String[][] changTo2DString(String s) {
        s = s.replace(" ", "");
        List list = changeToStringList(s);
        if (list == null || list.size() == 0) {
            throw new RuntimeException("必须保证是二维数组啊,亲");
        }
        List list1 = (List)list.get(0);
        int m = list1.size(), n = list.size();
        String[][] ans = new String[n][m];
        for (int i = 0; i < n; i++) {
            list1 = (List)list.get(i);

            if (list1.size() != m) {
                throw new RuntimeException("数组越界了啊,亲,必须保证维度相同啊");
            }
            for (int j = 0; j < m; j++) {
                ans[i][j] = (String) list1.get(j);
            }
        }
        return ans;
    }


    public static void main(String[] args) {

        String s = "[[\"fda\"],[\"dsfa\"]]";
        List list = changeToStringList(s);
        System.out.println(list);

        s = "[[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]]";
        list = changeToIntList(s);
        System.out.println(s);
        int[][]arrs = changeTo2DIntArray(s);
        PrintArrays.print2DIntArray(arrs);


        s = "[13,43,42,1]";
        int[] arr = changTo1DIntArray(s);

        System.out.println();

        s = "[\"mass\",\"as\",\"hero\",\"superhero\"]";
        String[] sArr = changeTo1DString(s);
        PrintArrays.print1DObjArray(sArr);

        s = "[[\"mass\",\"as\"],[\"hero\",\"superhero\"]]";
        String[][] sArrs = changTo2DString(s);
        PrintArrays.print2DObjArray(sArrs);
    }
}

数组的输出

每次调试的时候,输出一、二维数组,都是一个巨大的负担。
并且Java中数组转化成list还需要强制转换或者使用流操作,特别不爽,还是自己写一个打印的比较爽。

package leetcode.utils;

/*
*
*   对数组的输出
* */
public class PrintArrays {

    private PrintArrays() {}

    public static void print2DIntArray(int[][] arr) {
        if (arr.length == 0) {
            System.out.println("[]");
            return ;
        }
        int n = arr.length, m = arr[0].length;
        System.out.print('[');
        for (int i = 0; i < n; i++) {
            System.out.print('[');
            for (int j = 0; j < m; j++) {
                System.out.print(arr[i][j]);
                if (j != m - 1) System.out.print(',');
                else System.out.print(']');
            }
            if (i != n - 1) System.out.print(',');
            else System.out.println(']');
        }
    }
    public static void print1DIntArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1) System.out.print(",");
            else System.out.println("]");
        }
    }

    public static void print1DObjArray(Object[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1) System.out.print(",");
            else System.out.println("]");
        }
    }

    public static void print2DObjArray(Object[][] arr) {
        if (arr.length == 0) {
            throw new RuntimeException("必须是二维数组啊,亲人");
        }
        int n = arr.length, m = arr[0].length;
        System.out.print('[');
        for (int i = 0; i < n; i++) {
            System.out.print('[');
            for (int j = 0; j < m; j++) {
                System.out.print(arr[i][j]);
                if (j != m - 1) System.out.print(',');
                else System.out.print(']');
            }
            if (i != n - 1) System.out.print(',');
            else System.out.println(']');
        }
    }


    public static void main(String[] args) {
        int[][] nums = {{323,432},{42,42}};
        print2DIntArray(nums);
        int[] num = {123,434};
        print1DIntArray(num);
    }
}

树的操作

暂定

链表的操作

妈妈再也不用担心我没法调试列表了。

  • 链表的创建
  • 链表的遍历
  • 链表的反转
package leetcode.utils;

import com.sun.istack.internal.NotNull;
import leetcode.everyDay.April.Exercise25;

import java.util.List;

public class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val,ListNode next) {
        this.val = val;
        this.next = next;
    }

    private static ListNode createList(int[]list) {

        ListNode head = new ListNode();
        ListNode p = head;
        for (int x: list) {
            p.next = new ListNode(x);
            p = p.next;
        }
        return head.next;
    }

    public static void travelList(@NotNull ListNode h) {
        ListNode p = h;
        System.out.print("[");
        while(p.next != null) {
            System.out.print(p.val + ",");
            p = p.next;
        }
        System.out.println(p.val + "]");
    }
    public ListNode reverseList(ListNode l) {
        ListNode head = new ListNode();
        ListNode p = l;
        while(p != null) {
            ListNode t = p;
            p = p.next;
            t.next = head.next;
            head.next = t;
        }
        return head.next;
    }

    public static void main(String[] args) {
        int[]list = {1,2,3,3,4,4,5};
        ListNode h = createList(list);
        travelList(h);
    }
}

点赞点赞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值