0
点赞
收藏
分享

微信扫一扫

基于HTTP编写ping操作

炽凤亮尧 2024-11-18 阅读 2

20. 有效的括号

参考代码

#include <stack>

class Solution {
public:
    bool isValid(string s) {
        if(s.size() < 2){ //特判:空字符串和一个字符的情况
            return false;
        }
        bool flag = true;
        stack<char> st; //栈
        for(int i=0; i<s.size(); i++){
            if(s[i] == '(' || s[i]=='{' || s[i]=='['){
                st.push(s[i]);
            }
            if(s[i] == ')' || s[i]=='}' || s[i]==']')
            {
                if(st.empty()){
                    flag = false;
                    break;
                }
                char c = st.top();
                //括号匹配
                if((c == '(' && s[i] == ')') || (c == '{' && s[i]=='}') || 
                (c =='[' && s[i]==']')){
                    st.pop();
                }
                else{
                    flag = false;
                    break;
                }
            }
        }
        if(!st.empty()) //栈里面还有元素
        {
            flag = false;
        }
        return flag;
    }
};

2. 两数相加

参考代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {} 初始化
 *     ListNode(int x) : val(x), next(nullptr) {} 赋值
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *previous, *current;
        previous = new ListNode(-1); //虚拟结点
        current = previous;
        int t = 0; //注意进位
        while(l1 || l2 || t){
            if(l1){
                t += l1->val;
                l1 = l1->next;
            }
            if(l2){
                t += l2->val;
                l2 = l2->next;
            }
            current = current->next = new ListNode(t % 10);
            t /= 10;
        }
        //返回头结点的下一个结点,即第一个数字结点
        return previous->next;
    }
};

228. 汇总区间

参考代码

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> result;
        int i=0, size=nums.size();
        while(i < size){
            int low = i;
            i++;
            while(i < size && nums[i] == nums[i-1] + 1)
            {
                i++;
            }
            int high = i-1;
            //找不到连续数字:
            string s = to_string(nums[low]);
            if(low < high){ //形成区间
                s += "->" + to_string(nums[high]);
            }
            //否则,区间只有一个数
            result.push_back(s);
        }
        return result;
    }
};
举报

相关推荐

0 条评论