LeetCode小白菜笔记2:Reverse Integer

LeetCode小白菜笔记[2]:Reverse Integer7. Reverse Integer [Easy]

题目:

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

1

2

Example 2:

1

2

Example 3:

1

2

Note:

Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

题目要求为给一个32bit的signed int,将它按十进制位翻转。并且当翻转后的高位有0的时候不显示0。而且当溢出时返回0。

基本思路如下,两个任务:

按位翻转

判断溢出

先做按位翻转,首先,要由低到高逐个取出每一位上的数值;然后,将取出的值由高到低排列起来。取每一位的数值的方法就是先除若干次10,将要取的位置放到最低位,然后模10将数字取出来。

判断溢出的方法:由于我们的返回值是从高位到低位排起来的,可以看作每次将已有的值左移一位,并在末尾加上新取出的值。左移即乘以10,加上末尾的值后可能溢出。由于overflow实际上丢失了信息,即不可逆,所以每做完一次后。都减去末尾的值并除以10,判断是否与之前的一致,如果不一致,则溢出,否则说明没有溢出。

为了说明溢出问题,用C代码实现。因为python如果原来的类型溢出的话会自适应的调整,比如:

1

2

3

4

5

6

C代码实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

结果:

再用Python实现,这时候判断溢出采用直接与32bit的有符号数的取值范围比较决定。代码和结果如下:

勉强通过的样子。。。

python对于负数的模运算%和整除运算和C不一样啊…这是python的结果:

所以还要转成正数才能进行按位取值,而C不一样:除运算符号相同为正,相异为负,模运算的正负和被除数一样。比如:

-3/16=0, 16/-3=-5, -3%16=-3, 16%-3=1

对于被除数时负数的情况,C的余数为负,而Python的余数始终是正的,而整除又是通过减去余数算的,因此出现了偏差。

总结

不同语言对有些运算处理不一样,需要注意。

习惯了Python和Matlab等,用C的时候常常忘记先定义后使用,还忘记分号….这是不吼滴。

THE END

星期六, 09. 十二月 2017 11:16下午

本文来自企鹅号 - 兔角与禅媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

《笨办法学Python》 第21课手记

《笨办法学Python》 第21课手记 本节课介绍函数和返回值,出现了函数嵌套,即函数的返回值可以不经赋值而直接做函数参数使用。 原代码如下: def add(...

1967
来自专栏杂七杂八

numpy科学计算包的使用1

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形...

3885
来自专栏好好学java的技术栈

“365算法每日学计划”:05打卡-图解冒泡排序(多解法)

993
来自专栏King_3的技术专栏

leetcode-344-Reverse String

2245
来自专栏韦弦的偶尔分享

Swift 旋转数组 - LeetCode

例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]。

995
来自专栏Python小屋

详解Python中的位运算符规则、原理与用法

在Python中,位运算符包括位与(&)、位或(|)、位求反(~)、位异或(^)、左移位(<<)和右移位(>>)。 1. 运算方法与规则 位运算符只能适用于整数...

3756
来自专栏赵俊的Java专栏

LeetCode 557 Reverse Words in a String III

首先按照空格对字符串进行分隔,然后将每个单词进行翻转后再拼接回字符串即可,需要注意拼接时记得加空格,但最后一个单词不需要加。

581
来自专栏数据结构与算法

P2563 [AHOI2001]质数和分解

题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质...

35111
来自专栏小樱的经验随笔

Gym 100952G&&2015 HIAST Collegiate Programming Contest G. The jar of divisors【简单博弈】

G. The jar of divisors time limit per test:2 seconds memory limit per test:64 me...

2715
来自专栏和蔼的张星的图像处理专栏

407. 加一加和进位分开处理

给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。 该数字按照大小进行排列,最大的数在列表的最前面。 样例 给定 [1,2,3] 表...

761

扫码关注云+社区