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 条评论
登录 后参与评论

相关文章

来自专栏Java开发者杂谈

java如何获取一个对象的大小

When---什么时候需要知道对象的内存大小 在内存足够用的情况下我们是不需要考虑java中一个对象所占内存大小的。但当一个系统的内存有限,或者某块程序代码允许...

4446
来自专栏专注研发

lambda表达式

652
来自专栏java闲聊

JDK8-Lambda表达式集合操作

public static List<Dish> toLists(){ return Arrays.asList( new...

693
来自专栏Android知识点总结

Java总结之映射家族--Map概览

774
来自专栏Java 源码分析

HashSet 源码分析

HashSet 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在...

2944
来自专栏Jerry的SAP技术分享

Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序

文章的标题看似自相矛盾,然而我在“正确”二字上打了引号。我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点。

1083
来自专栏闵开慧

Java盲点解析

1 堆栈区别     Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarr...

3136
来自专栏Jaycekon

Stream-快速入门Stream编程

一、什么是流 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator...

3036
来自专栏跟着阿笨一起玩NET

C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)

492
来自专栏Java爬坑系列

【Java入门提高篇】Day24 Java容器类详解(七)HashMap源码分析(下)

前两篇对HashMap这家伙的主要方法,主要算法做了一个详细的介绍,本篇主要介绍HashMap中默默无闻地工作着的集合们,包括KeySet,val...

1573

扫码关注云+社区