likes
comments
collection
share

【刷题日记】504. 七进制数

作者站长头像
站长
· 阅读数 36

【刷题日记】504. 七进制数

本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数简单

一、题目描述:

【刷题日记】504. 七进制数

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

看了这题的描述和示例,是比较简单的,对于 7 进制的题目,和 2 进制3 进制 等等都是类似的思想和做法,我们可以得到如下几个信息

  • 要求将一个整数,转换成对应的 7 进制数,输出的是字符串
  • 如果整数是负数,得到的字符串第一个字符是 -
  • 使用辗转相除法来进行处理,对于 N 进制都是可以处理的

按照上述给出示例,我们可以使用辗转相除法来推演一下,我记得这个还是学的时候学的方法:

用 100 除以 7 ,商 14,余数为 2

用 14 除以 7 ,商 2 ,余数为 0

用 2 除以 7 , 商 0,余数为 2

然后 7 进制就是余数组合在一起 "202",这里是会会有误解,以为会是从上至下,还是至下而上

【刷题日记】504. 七进制数

那我们可以换另外一个数字,比如说 102

计算方式还是和上面一直,这里就不在赘述了

【刷题日记】504. 七进制数

最后 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…

【刷题日记】504. 七进制数

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

【刷题日记】504. 七进制数

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

转载自:https://juejin.cn/post/7073125986271199263
评论
请登录