Leetcode-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?\d+
^: 匹配字符串开头
[±]:代表一个+字符或-字符
?:前面一个字符可有可无
\d:一个数字
+:前面一个字符的一个或多个
\D:一个非数字字符
*:前面一个字符的0个或多个 -
最容易想的-就是遍历
按照题目描述的进行遍历
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;
}
};
- 回文数
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 三数之和
这道题完全没有思路
+- ↩︎