【刷题日记】504. 七进制数
本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数 ,简单
一、题目描述:
二、思路分析:
1、这道题考察了什么思想?你的思路是什么?
看了这题的描述和示例,是比较简单的,对于 7 进制的题目,和 2 进制,3 进制 等等都是类似的思想和做法,我们可以得到如下几个信息
- 要求将一个整数,转换成对应的 7 进制数,输出的是字符串
- 如果整数是负数,得到的字符串第一个字符是
-
- 使用辗转相除法来进行处理,对于 N 进制都是可以处理的
按照上述给出示例,我们可以使用辗转相除法来推演一下,我记得这个还是学的时候学的方法:
用 100 除以 7 ,商 14,余数为 2
用 14 除以 7 ,商 2 ,余数为 0
用 2 除以 7 , 商 0,余数为 2
然后 7 进制就是余数组合在一起 "202",这里是会会有误解,以为会是从上至下,还是至下而上
那我们可以换另外一个数字,比如说 102
计算方式还是和上面一直,这里就不在赘述了
最后 102 的 7进制数是 , 204 , 不是 402 , 通过图中,我们可以看到,余数的组合是至下而上的
2、尝试编码
那么,根据上述的图示和逻辑,那么咱们不难写出类似于这样的代码
对于编码的时候,我们需要考虑一下,num 为 0 的情况,和 num 为负数的情况
func convertToBase7(num int) string { // 处理 负数的情况 res := "" yu := 0 var tmp int if num < 0{ tmp = 0 - num res = "-" }else{ tmp = num } tmpStr := make([]string,0) for { yu = tmp % 7 // 取余 tmp = tmp / 7 // 求商 tmpStr = append(tmpStr,strconv.Itoa(yu)) if tmp == 0 { break } } for i:=len(tmpStr)-1;i>=0;i--{ res += tmpStr[i] } return res }
上面代码也非常简单
- 第一步处理负数的情况
- 第二步处理余数和商的关系,并把余数放到一个数组里面
- 第三步反向遍历该数组,得到结果
四、总结:
上述这是一种常规且简单的做法,官方的方式是 倒推 + 迭代 ,可以看看如下官方代码,有没有另外的启发了,感兴趣的可以看看 leetcode-cn.com/problems/ba…
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~