刷力扣的第一天脑子要长出来的感觉(怎么有人大四才开始啊啊啊啊啊啊啊啊啊啊啊啊,又是等成绩的一天,)

刷力扣的第一天脑子要长出来的感觉(为什么大四才开始啊啊啊啊啊啊啊啊啊啊啊啊)

emmm,自己还是想不太出来(只是一点想法),可能还是会参考评论区,求各位轻喷

  1. 分析:带符号一定不是回文,要像个好办法将121,第n-1位和第2位联系起来
    1. 取余得出后一位。
    2. %去第n位
    3. if(n/10==n%10){ true}
    4. 外面再嵌套一层do while
 public boolean isPalindrome(int x) {
       if(x<0){
            return false;}
        int cur = 0;
        int num = x;
        while(num != 0) {
            /*例如:121  第一次 cur=1   num=12
                   121  第二次 cur=1*10+12%10=12
                              num=1
                        第三次 cur=12*10+1
                              num=0退出循环*/
            cur = cur * 10 + num % 10;//将原来的数倒置,
            num /= 10;
        }
        return true;//我的想法,不能通过全部案例,可以改成
     /* return  cur==x; //倒置结果相等位true,
     */
    }

判断到一半就退出

  1. 罗马数字转整数

    1. 分析题目,找规律
    2. 小值在大值左边,减小值
    3. 小值在大值右边,加小值
    /*没想到用switch  case来转换字符与数值的关系*/
    class Solution {
        private int getValue(char ch) {//从字符转化成数字
            switch(ch) {
                case 'I': return 1;
                case 'V': return 5;
                case 'X': return 10;
                case 'L': return 50;
                case 'C': return 100;
                case 'D': return 500;
                case 'M': return 1000;
                default: return 0;
            }
        
        }
        public int romanToInt(String s) {
            int sum = 0;
            int preNum = getValue(s.charAt(0));//获取第一个字符,更具数值的大小判断用-/+法
            for(int i = 1;i < s.length(); i ++) {
                int num = getValue(s.charAt(i));
                if(preNum < num) {
                    sum -= preNum;
                } else {
                    sum += preNum;
                }
                preNum = num;
            }
            sum += preNum;
            return sum;
        }
    }
    
    
    1. 提交的版本
    class Solution {
        public int romanToInt(String s) {
             int sum=0;//用于记录得出的值
             int first=getValue(s.charAt(0));//s.char()获取字符,调用方法或得数值 
             /*for来读取有几个数值,并比较左值和右值的大小来判断用-/+ */
            for(int i = 1;i < s.length(); i ++) {
                int num = getValue(s.charAt(i));//获取后面的数值
                if(first < num) {//first不一定就是第一个值啦
                    sum -= first;
                } else {
                    sum += first;
                }
                first = num;
            }
            sum += first;
            return sum;
    
        }
        private int getValue(char ch) {
            switch(ch) {
                case 'I': return 1;
                case 'V': return 5;
                case 'X': return 10;
                case 'L': return 50;
                case 'C': return 100;
                case 'D': return 500;
                case 'M': return 1000;
                default: return 0;
            }
        
        }
    }
    
  2. 最长前缀(王道数据结构中有类似题目)

    1. c++将字符串分解成一个一个字符,使用两个指针,同时从第一个空间开始便利,对比两个空间里的字符是不是一样的。
    2. java:找个最短的字符,读取长度,在长度内和另一个字符一一比较,不同就跳出,并记录个数,好输出
/*我的,不能通过所以的案例*/
class Solution {
    public String longestCommonPrefix(String[] strs) {
        /*如果有空字符,就没有共同前缀 */
        if(strs.length == 0) 
            return " ";
        /*用一个字符串来比较 */
        String a = strs[0];
        /**for循环来一次比较,并在跳出前记录以及比较过的字符串 */
        for(int i =1;i<strs.length;i++) {
            int j=0;
            for(;j<a.length() && j < strs[i].length();j++) {
                if(a.charAt(j) != strs[i].charAt(j))
                   {
                        break;
                    }
            }
            a = a.substring(0, j);//j用来记录相同的字符个数,
            if(a.equals("")){
                return " ";//删除空格就可以通过所有的了
            }
            }return a;//输出字符
    }
    
}
  1. 有效括号(王道)

    /*switch  case  case里面用ifelse,但是代码量比较大,要长脑子 了么*/
    class Solution {
        public boolean isValid(String s) {
            int n=s.length();
            if(n%2!=0) return false;//入一半的栈
            int[] stack;
            stack=new int[n];
            int top=-1;
            for(int i=0;i<n;i++){
                int c = s.charAt(i);
                if(c=='('||c=='{'||c=='['){
                    stack[++top]=c;
                }//只有左边可以入栈
                else{
                    if(top!=-1){
                        switch(c){
                            case ')':
                                if (stack[top]!='(') 
                                    return false;
                                break;
                            case '}':
                                if (stack[top]!='{') 
                                    return false;
                                break;
                            case ']':
                                if (stack[top]!='[') 
                                    return false;
                                break;
                        }
                        top--;
                    }
                    else 
                        return false;//右半边不能入栈
                }
            } 
            if(top!=-1) 
                return false;
            return true;
        }
    }
    /*用栈,进出栈来比较左右括号*/
    
  2. 合并链表(王道)

/*链表的比较,以及语法还是要再加强一下,好不容易会一个,因为链表.的使用方法纠结好久,给了结构体,所以用.val和.next来移动指针和取值
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; }
 * }*/
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    
        if(list1 == null) {
            return list2;
        }
        if(list2 == null) {
            return list1;
        }

        if(list1.val < list2.val) {
            list1.next = mergeTwoLists(list1.next, list2);
            return list1;
        } else {
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }

    }
}
  1. 删除重复项(王道有)我是菜菜,没做出来
int length = nums.length;
        if (length <= 1) {
            return length;
        }
        int j = 0;
/*j作为一个哨兵,用于记录删除后后续应填入数的位置*/
        for (int i = 0; i < length; i++) {
            if (nums[i] != nums[j]) {
                nums[++j] = nums[i];//重点,相等时j不变,不移动,等不等时,移动指针,放入nums[i]的值
            }
        }
        return j+1;
/*在26的基础上改编*/
class Solution {
    public int removeElement(int[] nums, int val) {
int length = nums.length;
        if (length < 1) {
            return length;
        }
        /*不加的话,会有一个例子不过*/
        if(length==1){
            if(nums[0]==val)
            {return 0;}
        }
        int j = 0;
/*j作为一个哨兵,用于记录删除后后续应填入数的位置*/
        for (int i = 0; i < length; i++) {
            if (nums[i]!=val) {
                nums[j++] = nums[i];//重点,相等时j不变,不移动,等不等时,移动指针,放入nums[i]的值
            }
        }
        return j;
    }
}
  1. /*呦吼,完全自己写的没有参考哦,脑子开始长了*/
    class Solution {
        public int searchInsert(int[] nums, int target) {
           int j=0;
            for(int i=0;i<nums.length;i++){
                if(nums[i]<=target){
                    if(nums[i]<target)
                    {j++;}else{
                        break;
                    }
                }else{
                    break;
                }
            }return j;
        }
    }
    
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在VS Code上力扣LeetCode)题目,首先需要进行以下几步操作: 1. 安装VS Code插件:在VS Code中搜索并安装LeetCode插件。这个插件可以提供LeetCode题目的在线编写和提交功能,以及自动测试和调试代码的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【史上最强代码编辑器VS Code】之VS Code力扣LeetCode)题目](https://blog.csdn.net/weixin_44553006/article/details/105183522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [在 vscode 上力扣 Leetcode 可以这样来](https://blog.csdn.net/u012190388/article/details/121277555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [leetcode答案-algo-study:从零开始力扣(LeetCode),JavaScript语言,算法](https://download.csdn.net/download/weixin_38680764/19920528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值