leetcode刷题记录——整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。

来源:力扣(LeetCode)链接:https://leetcode.cn/problems/reverse-integer

自己的思路:

首先是获取输入整数的位数n,从i位数取10^(i+1)的余数再除以10^i就获得i+1位数,再乘以反转后对应的10^(n-i-1)就获得反转后对应的数,最后循环遍历相加起来就得到反转数。

C语言:

#include<math.h>

longpow1(intn,intm){

longz=1;

for(inti=0;i<m;i++){

z=n*z;

}

returnz;

}

intreverse(intx){

intb=x;

intn=1;

while(b/10!=0){

b=b/10;

n++;

}

if(abs(x)>pow1(2,31)-1){

return0;

}

intr=0;

if(x<0){

x=x*-1;

for(inti=0;i<n;i++){

r+= (x%pow1(10,i+1)/pow1(10,i))*pow1(10,n-i-1);

}

}else{

for(inti=0;i<n;i++){

r+= (x%pow1(10,i+1)/pow1(10,i))*pow1(10,n-i-1);

}

}

if(abs(r)<pow1(2,31)-1){

returnr;

}else{

return0;

}

}

// 时长:4ms 空间:5.3MB

大佬思路:

反转的思想是取余再乘相应的位权

Go语言:

作者:zoffer链接:https://leetcode.cn/problems/zigzag-conversion/solution/ji-jian-jie-fa-by-ijzqardmbd/

这个佬的解题过程给得很清晰。

//注意范围可以用INT_MIN和INT_MAX表示(调用库)

//注意负数取余问题,计算机里取余是商靠近0原则,所以负数%10就是最低位本身

intreverse(intx){

inti=0;

while(x){

if (i<INT_MIN/10||i>INT_MAX/10) { //注意,循环的过程中就要判断是否会 溢出

return0;

}

i=i*10+x%10;

x=x/10;

}

returni;

}

// 时长:0ms 空间:5.6MB

Go语言:

(双100%需要多提交几次才会出现,我第一次提交就双100%,天真的以为每次都可以双100%@3@))1.采用 % 取余 和 / 取商 的的思路。2.充分利用go语言的数据类型特点。1)先用int类型res接受int类型x的反转结果;2)关键点:判断res是否超出int32的长度,将res转化为int32类型:int32(res)并赋值给temp,方便判断;3.判断方法:提前赋值判断。如果temp10是溢出的,那么(temp10)/10不会等于temp,从而终止程序return 0;4.注意:无需判断x为正负值的情况。res的正负值是根据x来的,因为res的初始值等于x%10也就直接决定了res的值是否是正或负,而res的后续值是根据初始res值来进行变化的。

作者:li-er-dan-2链接:https://leetcode.cn/problems/reverse-integer/solution/shuang-100ji-bai-yong-hu-gan-shou-goyu-yan-zhi-you/

funcreverse(xint) int {

varresint

forx!=0 {

iftemp :=int32(res); (temp*10)/10!=temp {

return0

}

res=res*10+x%10

x=x/10

}

returnres;

}

// 时长:0ms 空间:5.6MB

总结:

这道题其实很简单,但是难点在于输入的整数的限制条件怎么去判断,自己对基本数据类型的认识不足还是需要多看书\多学习.

收获:

了解到C语言数据类型的基本含义.

学习链接:

C语言数据类型-https://www.runoob.com/cprogramming/c-data-types.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值