leetcode50-task03

这三天全部都在准备考试和考试,自己不想水过,一定坚持高质量完成
现在主要是补上之前的内容

1 整数反转

1.1 知识点–求整数权位上的数

  • 这没有什么特殊的知识点;就是看看对于基础操作记得牢不牢固;
  • 没有涉及到数据结构
    【求整数的各个权值上的数值】


1.2 解题思路

  • 第一想着的就是下面的常规思路了;
    【法一】

class Solution {
public:
    int reverse(int x) {
        int abs;
        bool flag;
        if(x>=0){
            abs=x;
            flag=true;
        }else{
            abs=-x;
            flag=false;
        }

        int count=0;
        while(abs/10!=0){
            count++;
        }
        
        // 求每位权值上的数值,把他放置在数字里面
        int invert[count];
        int i=0;
        while(count){
            invert[i]=abs/(int)pow(10,count);
            abs=abs-invert[i]* (int)pow(10,count);
            i++;
            count--;
        }
        count=i;
        // 开始输出输出
        int res=0;
        for(i=0;i<count;i++){
            res+=invert[i]*(int)pow(10,i);
        }

        // 判断正负
        if(flag){
            return res;
        }else{
            return (-1)*res;
        }
		
		// 溢出前检查

    }
};

【法二】

// 这个借鉴别人的题解注释的,这个真的是没有想到
int reverse(int x){
    long long r = 0;

    while (x) {
        r = r*10 + x%10;
        x /= 10;
    }
    if (r > pow(2, 31) || r < -pow(2, 31)-1)
        return 0;

    return  r;
}


2 寻找两个正序数组的中位数

2.1 知识点

  • ASCII码值;
  • 正则表达式知识点

2.2 知识点内容

2.3 Demo

2.4 解题思路

参考学习来源:https://blog.csdn.net/m0_37678226/article/details/112532948

  1. 正则表达式–大神版
    一行正则表达式:1?\d+
    ^: 匹配字符串开头
    [±]:代表一个+字符或-字符
    ?:前面一个字符可有可无
    \d:一个数字
    +:前面一个字符的一个或多个
    \D:一个非数字字符
    *:前面一个字符的0个或多个

  2. 最容易想的-就是遍历
    按照题目描述的进行遍历

class Solution {
public:
    int myAtoi(string str) {
        long  temp=0;
        int k=0;
        while(k<str.size()&&str[k]==' ')k++;
        int flag=1;
        if(str[k]=='-'){
            flag=-1;
            k++;
        }
       else if(str[k]=='+')k++;
        if('9'<str[k]||str[k]<'0')return 0;
        while(k<str.size()&&('0'<=str[k]&&str[k]<='9')){
            temp=temp*10+str[k]-'0';
           if(temp-1>INT_MAX)break;
//两个作用一是简单判断是否越界提前终止,二是可能测试数据会有大于long 型的数据
            k++;
        }
         temp=flag*temp;
         if(temp>INT_MAX)return INT_MAX;
         if(temp<INT_MIN)return INT_MIN;
       return temp;
        
    }
};

  1. 回文数

3.1 知识点

该题目没有什么知识点

3.2 解题思路

  • 整数转换成字符
  • 数学方法:常用每个权值的数怎么读。
// 整数转换成字符解法
def isPalindrome(self,x:int)->bool:
        a = str(x)
        b = (len(a))//2
        return a[:b] == a[-1:-b-1:-1]



// 法二:数学解法
class Solution:
    def isPalindrome(self, x: int) -> bool:
        x_save = x
        ans = 0
        if x < 0:
            return False
        else:
			//整数反转过来
            while x != 0:
                temp = x % 10
                x //= 10
                ans = ans * 10 + temp


            if ans == x_save:
                return True
            else:
                return False

4 盛最多水的容器

4.1 知识点

  • vector& height : 这个& 号是代表什么意思。
  • 双指针法

4.2 知识点内容

4.3 解题思路

刚看到这个真的是一点思路都没有,感觉自己有点好菜,但是所辛题目就是这些,尽量每道题都见过一遍。
双指针法:

// 这个完全是看别人的思路,自己一点都没有想出来。
int maxArea(vector<int>& height) {
    int res = 0;
    int i = 0;
    int j = height.size() - 1;
    while (i < j) {
        int area = (j - i) * min(height[i], height[j]);
        res = max(res, area);
        if (height[i] < height[j]) {
            i++;
        } else {
            j--;
        }
    }
    return res;
}

作者:nettee
链接:https://leetcode-cn.com/problems/container-with-most-water/solution/on-shuang-zhi-zhen-jie-fa-li-jie-zheng-que-xing-tu/


5 最长公共前缀

5.1 思路

这道题比较简单,最简单的嵌套for循环

//就是将其其两两比较
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) return "";
        String result = strs[0];
        if (strs.length == 1) return strs[0];
        for (int i = 0; i < strs.length; i++) {
            if (!strs[i].startsWith(result)) {
                result = result.substring(0, result.length() - 1);
                i--;
            }
        }

        return result;
    }
}

6 三数之和

这道题完全没有思路


  1. +- ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值