LeetCode练习题

14.最长公共前缀

class Solution {
    public String longestCommonPrefix(String[] strs) {
        //如果输入的strs为空,则返回空字符串""
        if(strs.length==0){
            return "";
        }
        //定义一个ans为strs.[0],获取到strs的第一个字符串为了一下面的循环比较
        String  ans = strs[0];
        for(int i=1; i<strs.length; i++){
            //在这里定义j=0,而不是在for里面定义;是为了ans.substring(0,j)能调用j的值
            int j = 0;
            for(;j<ans.length() && j<strs[i].length(); j++){
                //比较俩个字符串相同的部分,不相同则退出循环
                if(ans.charAt(j) != strs[i].charAt(j))
                    break;
            }
            //获取从0到j相同的字符串
            ans = ans.substring(0,j);
            //如果ans获取的结果为空则返回空字符
            if(ans.equals(" "))
                return ans;      
        }
        //返回最终获取到的ans
        return ans;
        
    }
}

20.有效的括号

public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        char[] charArray = s.toCharArray();

        for (char ch : charArray) {
            //如果是左括号则直接入栈
            if (ch == '(' || ch == '{' || ch == '[') {
                stack.push(ch);
            } else {
               //如果是右括号,并且此时栈不为空
                if (!stack.isEmpty()) {
                    if (ch == ')') {
                        if (stack.pop() != '(')
                            return false;
                    } else if (ch == '}') {
                        if (stack.pop() != '{')
                            return false;
                    } else {
                        if (stack.pop() != '[')
                            return false;
                    }
                }
                else{ //此时栈为空,但却来了个右括号,也直接返回false
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
class Solution 
{
public:
    bool isValid(string s) 
    {
        stack<char>S;
        for (char ch : s)
        {
            //如果当前栈为空,但是ch是右括号应该返回false
            if (S.empty() && ch == ')' || S.empty() && ch == ']' || S.empty() && ch == '}')
                return false;
            //如果ch是左括号,应该将其入栈,等待匹配
            if (ch == '(' || ch == '[' || ch == '{')
                S.push(ch);
            
            else
            {
                //如果输入的右括号和当前栈顶元素匹配,那么弹出栈顶元素
                if (S.top() == '(' && ch == ')' || S.top() == '[' && ch == ']' || S.top() == '{' && ch == '}')
                    S.pop();
                //当前栈顶元素与ch不匹配,直接返回false
                else
                    return false;
            }
        }
        //如果栈为空,返回true
        if (S.empty())
            return true;
        else
            return false;
    }
};

21.合并两个有序链表

方法二 递归(推荐)

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (l1 == nullptr) {
            return l2;
        } else if (l2 == nullptr) {
            return l1;
        } else if (l1->val < l2->val) {
            l1->next = mergeTwoLists(l1->next, l2);
            return l1;
        } else {
            l2->next = mergeTwoLists(l1, l2->next);
            return l2;
        }
    }
};

26.删除有序数组中的重复项

 public int removeDuplicates(int[] nums) {
    if(nums == null || nums.length == 0) return 0;
    int p = 0;
    int q = 1;
    while(q < nums.length){
        if(nums[p] != nums[q]){
            nums[p + 1] = nums[q];
            p++;
        }
        q++;
    }
    return p + 1;
}

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int p=0,q=1;
        while(q<nums.size()) {
            if(nums[q]!=nums[p]) {
                nums[++p]=nums[q];
            }
            q++;
        }
        return p+1;
    }
};

图一 Java

图二 c++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode是一个著名的在线编程题库,可以帮助计算机程序员提升编程能力。LeetCode的题目涵盖了算法、数据结构、字符串、数组、链表等多个方面的知识,对于求职面试以及算法竞赛准备非常有帮助。 LeetCode上的编程题目分为简单、中等和困难三个难度级别。每个题目都有详细的题目描述、输入输出示例以及参考答案等内容。在解决每个问题时,我们需要仔细阅读题目,并根据题目要求提供正确的解答。 通常,我们需要使用编程语言如Python、C++等来实现解题思路。在编码之前,我们需要先分析问题,并找到合适的算法或数据结构来解决问题。一般来说,我们可以使用递归、迭代、动态规划等方法来解决常见的编程问题。 在LeetCode上,我们可以提交解答,并测试解答是否通过了所有的测试用例。如果通过了所有的测试用例,我们就可以得到题目的AC(Accepted)结果,并获得该题目的通过证书。如果没有通过所有的测试用例,我们可以检查自己的解答,查找解答中的错误或者不完善之处,并进行修改和优化。 总之,LeetCode编程题是一个优秀的学习和练习编程的平台。通过解答LeetCode上的编程题目,我们可以提升自己的编程能力,并且培养解决问题的思维方式。无论是求职面试还是算法竞赛,LeetCode编程题都是非常有帮助的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值