LeetCode-9-Palindrome Number

这道题的题目是:判断一个数字是否是回文数,但是要求不能分配额外的空间。
思路很容易,就是看这个数字的前半部分和后半部分翻转后的值是否相同。我们可以利用取一个数字的各位上的数字的方法求出这个数字的后半部分翻转后的值:

注意,当x的位数是偶数时,直接比较res和x的值是否相同即可;但是当x的位数是奇数,如x=12321,当res=123、x=12,此时循环跳出,判断条件只要改成x==res%10即可。因此完整的代码是:

由这道题还可以引申出一道类似的题目:判断一个字符串是不是一个回文串。回文串的定义和回文数字类似,就是正着读倒着读效果是一样的字符串,如"charahc"。只需要用两个指针分别指向字符串的头和尾,比较当前这两个指针所指向的字符是否相同,若相同则继续移动这两个指针,直到这两个指针相遇为止。代码如下:

LeetCode-7-Reverse Integer

这道题仍然属于一道简单题。题目描述是这样的:给定一个32位signed int类型的整数,将它进行反转,如输入123返回321,输入-123返回-321。另外,题目下的提示中也说明了一些特殊情况,一种是输入10、100这样末尾是0的数字时应该返回什么,另外一种是反转1000000003 时,结果有可能溢出。

首先我们先来思考一下为什么上面的结果会溢出。输入整数的类型为signed int,因此用二进制形式表示时,第一位是一个符号位,剩下的31位用来表示数字。231 = 2147483648,所以输入数字的范围是-2147483648 ~ 2147483647。而1000000003反转的结果是3000000001,超出了上述范围,因此发生了溢出,此时直接返回0即可。代码如下:

使用Catch 进行单元测试

单元测试,是一个在我耳边常常出现,但是我从来没有实践过的软件开发过程,因为我曾经认为单元测试对于我平时写的玩具代码而言是大材小用,是杀鸡用牛刀。最近在给华为做一个项目的过程中,甲方向我们明确提出了所写代码必须通过单元测试的要求,使得不得不去学习了一下单元测试的方法,这一试,让我感受到了单元测试的好处,现将整个过程记录如下。

继续阅读

SDWebImage 源代码剖析-缓存策略

在上一篇文章中,我们对Masonry 的源代码进行了分析。今天我们将对另外一个在iOS 开发中广泛使用的库的源代码进行分析,这个库就是鼎鼎大名的SDWebImage。事实上SDWebImage 是如此常用和好用,以至于没有听说过没有用过没有分析过这个库的人应该是少数了。下面是我个人对这个库的缓存策略部分的代码分析和理解。由于本人才疏学浅,若有错误,请大家及时指出,不吝赐教。

继续阅读

Objective-C 中的block

block 是Apple 为C语言提供的语言扩展,其实质是:带有自动变量的匿名函数。block 在iOS的动画、异步网络请求以及GCD等中被广泛使用。但是,它的语法却有点复杂,有人甚至专门做了一个网站来记录block 的用法,从网址中就可以看出他对block 的语法有多少怨言了。

继续阅读