技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 504. 十进制转换成7进制(Base 7)
给定一个整数,将其转换成7进制的字符串表示形式。
注:
输入整数在区间[-1e7, 1e7]内。
学过计算机原理的小伙伴都应该知道,10进制N到某2进制的转换过程就是:
对于7进制这个步骤是一样的,仅仅需要将上面步骤的2替换为7即可。
关于正整数的转换很简单,按照上面步骤直接循环转换即可。
由于上面步骤0作为临界条件,所以当num为0时要单独处理。
当num为负数时,要先将其转换成正数再处理,符号的追加放最后。
既然说到负数,我想说一个题外话,关于负数的除法:
python和C,java的除法是不同的(这里说的除法都是整数除法,与python的"/"除法无关)。
C和Java的除法是直接截断,丢弃后面的小数部分,所以-6/5==-1 余 -1; 而python在做这个计算的时候,是对结果进行下取整,所以结果是-6//5=-1 余 4。如果还不知道的小伙伴们要注意了。
处理流程说完了,再说说存储的问题。
我们发现在整个转换过程中,res的长度是在不断变化的。理想的情况下,我们期望能动态的改变字符串的长度,但是对于某些语言这么做可能不太方便。
对于C语言来说不断变换字符串的长度会产生额外的开销。
其实一个整数转换成7进制,字符串的长度其实是有限的。当N取32位最小负整数时,算上符号,7进制的长度也仅仅只有13位。因此我们初始化一个长度是14的字符串完全足够了。
在转换的过程中,低位的先产生,再接着产生高位的。在添加高位字符的时候为了避免移动低位字符产生开销,我的方法是从res的倒数第二个位置(字符串应该以'\0'结尾)开始向左追加字符。等待转换完成后修改res的起始指针即可。
详细代码如下:
除了用循环外,我们发现,转换的任务重复且简单,也很容易用递归的方式实现。
Java 的Integer的toString静态方法,可以将一个整数转换成任意进制的数,所以我们可以用一行代码直接产生结果。代码如下:
Python 的实现我是递归实现的,当然你依然可以用循环来做。代码如下:
谢谢大家一直以来的关注和支持!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!
留言与评论(共有 0 条评论) |