最近开始练习算法,c语言的,先去力扣练习了三道。 有些生疏了,一些想法自己实现起来很吃力。 在自己来来回回,改来改去,还去看了一些别人的想法,终于弄明白这三道题。 得继续加油了。
- 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。 c语言解法:
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target,int *returnSize){
for(int i=0;i<numsSize-1;i++){
for(int j=i+1;j<numsSize;j++){
if(nums[i]+nums[j]==target){
int *result=(int*)malloc(sizeof(int)*2);//设置动态内存
result[0]=i;
result[1]=j;
*returnSize=2;//返回的数组长度为2
return result;
}
}
}
return 0;
}
- 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。 c语言解法:
long long d=0;
while(x){
d=d*10+x%10;
x=x/10;
}
if(x=0){
d=0;
}
if(d<pow(-2,31)||d>pow(2,31)-1){
return 0;
}
return d;
}
- 回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 c语言解法:
long long a=0;
if(x<0||x!=0&&x%10==0){
return false;
}
else{
while(x>a){
a=a*10+x%10;
x=x/10;
}
return x==a||x==a/10;
}
}