LeetCode

图片

class Solution {
public:
    string addStrings(string num1, string num2) {
        //字符串相加,用双指针法,分别指向两个字符串的末尾
        int i,j;
        //用来拼接字符串
        string ans="";
        int length1=num1.length();
        int length2=num2.length();
        i=length1-1;
        j=length2-1;
     //add 用来看是否需要进行进位
        int add=0;
        //while循环来进行从后往前的遍历
        while(i>=0||j>=0||add!=0){
            int x=0,y=0;
        //这里的if else  循环主要解决的问题就是如果都是一位的话,比如1+9 要进行进位i 和j都是-1了num[-1]会产生越界的错误
            if(i>=0){
                 x=num1[i]-'0';
            }else{
                 x=0;
            }
            if(j>=0){
              y=num2[j]-'0';
            }else{
                y=0;
            }
            int res=x+y+add;
            add=res/10;
            int digit=res%10;
           // cout<<digit<<endl;
            ans.push_back(digit+'0');
            i--;
            j--;
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

图片

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
        //vector<vector<int >> 是一个多维向量
        //res(numRows)   就是给res开辟了numRows个空间
        vector<vector<int>> res(numRows);
        for(int i=0;i<numRows;i++){
            //给第i行开辟空间 numRows个空间
            res[i].resize(i+1);
            //每一行的头和尾都是1
            res[i][0]=res[i][i]=1;
            for(int j=1;j<i;j++){
                res[i][j]=res[i-1][j-1]+res[i-1][j];
            }
        }
        return res;
    }
};

图片

class Solution {
public: 
    int aa(char a){
        switch(a){
            case'I': return 1; break;
            case'V': return 5; break;
            case'X': return 10; break;
            case'L': return 50; break;
            case'C': return 100; break;
            case'D': return 500; break;
            case'M': return 1000; break;
        }
        return 0;
    }
    int romanToInt(string s) {
        int sum=0;
        for(int i=0;i<s.length();i++){
            int number1=aa(s[i]);
            cout<<"number1="<<number1<<endl;
            int number2=aa(s[i+1]);
            cout<<"number2="<<number2<<endl;
            if(number1<number2){
                number1=-number1;
            }
            sum=sum+number1;
        }
        return sum;
    }
};

有点不明白为啥s[i+1],这块不会数组越界
图片

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        //初始化最长公共前缀为空
        string res;
        if(strs.empty()){
            return "";
        }else{
            //如果字符串不是空则把第一个子串当成前缀串
            res=strs[0];
        }
        for(int i=0;i<strs.size();i++){
            //find返回的是子串起始的位置,如果返回的不是零,证明不是前缀,就一直减直到是前缀为止
            while(strs[i].find(res)!=0){
                res=res.substr(0,res.length()-1);
            }
        }
        return res;
    }
};

图片

class Solution {
public:
       bool isValid(string s) {
        //使用哈希表来判断是否匹配
        map<char,int> mp={{'(',1},{'{',2},{'[',3},{')',4},{'}',5},{']',6}};
        stack<int> st;
        bool istrue=true;
        int flag;
       //然后遍历字符串,看是否匹配
       for(int i=0;i<s.length();i++){
            flag=mp[s[i]];
           if(flag>=1&&flag<=3){
               st.push(s[i]);
           }else if((st.empty()!=true)&&mp[st.top()]==flag-3){
               //如果出栈的栈顶元素的flag-3和刚刚的flag相同就出栈
                st.pop();
            }else{
                istrue=false;
                break;
               }
           }
       if(st.empty()!=true){
           istrue=false;
       }
           return istrue;
    }
};
//注意st.empty()的返回值是true 和false  不是0 和1
//map 的操作相当于一个二维数组  
//map<char,int> mp;
//初始化  mp={{'c'1,}} 
//  访问的时候mp[c]=1

图片

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int length=digits.size();
        for(int i=length-1;i>=0;i--){
            if(digits[i]==9){
                digits[i]=0;
            }else{
                digits[i]++;
                return digits;
            }
        }   
        //如果都加到头了,还是要进位就给前面补1
            digits.insert(digits.begin(),1);
            return digits;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值