题目一:回文数(难度:简单)
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
思路:通过获得x的每位数,直接将数值倒序,然后对比x即可。
bool isPalindrome(int x){
if(x<0) return false;
long long int t=0,y=x;
while(y>0){
t=t*10+y%10;
y/=10;
}
return t==x;
}
题目二:有效的括号(难度:简单)
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
思路:通过栈来存储每个左括号,出现右括号便对栈顶进行比较。若不相等,返回false;若栈为空,说明该右括号多余,返回false。最后,若栈不空,说明栈中有左括号没有匹配,返回false;若栈空,说明括号有效,返回true。
bool isValid(char * s){
char a[10000];
int top=-1,i=0;
while(s[i]){
if(s[i]=='('||s[i]=='['||s[i]=='{')
a[++top]=s[i];
else if(top!=-1&&s[i]==')'){
if(a[top]!='(') return false;
top--;
}
else if(top!=-1&&s[i]==']'){
if(a[top]!='[') return false;
top--;
}
else if(top!=-1&&s[i]=='}'){
if(a[top]!='{') return false;
top--;
}
else return false;
i++;
}
if(top==-1)
return true;
else return false;
}
题目三:删除有序数组中的重复项(难度:简单)
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
思路:由于给定数组已经排序,直接通过一次遍历整个数组,定义两个变量,一个存储新数组中的最后一个数的下标;另一个遍历原数组,若有新的非重复值,将其值赋值给第一个变量的下一个数。
int removeDuplicates(int* nums, int numsSize){
int k=0,flag=0;
if(numsSize==1) return 1;
for(int i=0,j=1;j<numsSize;j++){
flag=1;
if(nums[i]!=nums[j]){
k++;
nums[++i]=nums[j];
}
}
if(k!=0)
return k+1;
else if(flag==1) return 1;
else return 0;
}
题目四:比较版本号(难度:中等)
给你两个版本号 version1 和 version2 ,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 1 ,0 < 1 。
返回规则如下:
如果 version1 > version2 返回 1,
如果 version1 < version2 返回 -1,
除此之外返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compare-version-numbers
思路:将两个版本号'.'号前的修订号依次转换为整数进行比较即可。
int compareVersion(char * version1, char * version2){
int l1=strlen(version1),l2=strlen(version2);
int i=0,j=0;
while(i<l1||j<l2){
int x=0,y=0;
for(;i<l1&&version1[i]!='.';i++){
x=x*10+version1[i]-'0';
}
i++;
for(;j<l2&&version2[j]!='.';j++){
y=y*10+version2[j]-'0';
}
j++;
if(x!=y){
if(x<y) return -1;
else if(x>y) return 1;
}
}
return 0;
}
题目五:整数反转(难度:中等)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
思路:整型变量反转直接通过求余计算,要求反转后的整数不超过[-2^31,2^31-1]这个范围,直接在返回前进行判断即可。
int reverse(int x){
long long int n=0;
while(x){
n=n*10+x%10;
x/=10;
}
if(n>pow(2,31)-1||n<-pow(2,31)) return 0;
return n;
}