9.回文数

题目链接:https://leetcode-cn.com/problems/palindrome-number/

1.思路

刚刚做完整数反转,回文数好像也差不多,负数一定不是回文数;整数反转以后等于其本身为回文数。

2.注意事项

题目要求一定要有返回值,return NULL。

3.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool isPalindrome(long long int x){
int zf=1;
//int x;
//scanf("%d",&x);
if(x>0) zf=1;
if(x<0) {return false;}
int w=x,i=0,h=x;
while(w)
{
w/=10;
i++;
}
int sz[i+1],t=0;
long long int s=0;
for(int j=i;j>0;j--)
{
sz[j]=h%10;
h=h/10;
t=pow(10,j-1);
s=s+sz[j]*pow(10,j-1);
}
if(x==s) {return true;}
//printf("%lld",s);
return NULL;
}

是不是摸鱼了……

  

7.整数反转

题目链接:https://leetcode-cn.com/problems/reverse-integer

1.思路

记得曾经在洛谷做过,回去翻了下,自己定义了个10000000长度的数组……

先记录数组长度,根据数组长度定义数组,记录各个数对应的位数,再分别乘以10的次方实现反转

2.注意事项

​ 1.先回忆了32位的有符号数的概念(有关原码、反码、补码);

​ 2.在给s赋值时,9*10^10赋值出错,单int是不行的:

​ 整型变量int占4个字节,32位,取值范围是-2^31 - 2^31-1 ,也就是(-2147483648) - (2147483647),若溢出则会循环取值,

​ 也就是2147483648溢出后回到了最小负整数-2147483648,2147483649溢出后变成了-2147483648+1=-2147483647;

详细参考:https://zhuanlan.zhihu.com/p/98674721

而对x取绝对值时,给定数据超过了限制,即int x ,改成long long int 从根源上解决问题

​ 3.再学习学习abs(),pow(),sizeof()……

3.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int reverse(long long int x){
int zf=1;
//int x;
//scanf("%d",&x);
if(x>0) zf=1;
if(x<0) {x=(-1)*x;zf=0;}
int w=x,i=0,h=x;
while(w)
{
w/=10;
i++;
}
int sz[i+1],t=0;
long long int s=0;
for(int j=i;j>0;j--)
{
sz[j]=h%10;
h=h/10;
t=pow(10,j-1);
s=s+sz[j]*pow(10,j-1);
}
if(zf==0) s=-s;
//printf("%lld",s);
if(s>pow(2,31)-1 || s<(-1)*pow(2,31)) return 0;
else return s;
}

  

1.两数之和

题目链接:https://leetcode-cn.com/problems/two-sum/

开始回忆几乎快忘完的c语言知识,同时学java……

1.思路

双循环遍历数组;

看题解,指针没怎么学过,哈希就更不懂了,数据结构……

2.注意事项

return数组时,leetcode指定了returnSize分配return的有效内存,不赋值就return报错

3.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int* twoSum(int* nums, int numsSize, int target, int * returnSize){
int i=0,j=0;
static int c[2]={0};
*returnSize = 2;
for(i=0;i<numsSize;i++)
{
for(j=i+1;j<numsSize;j++)
{
if(nums[i]+nums[j]==target)
{
c[0] = i;
c[1] = j;
return &c;
break;
}
}
}
//printf("%d%d\n", i,j);
return NULL;
}

一定有返回值,需要return,不然报错……

  

:D 一言句子获取中...