概述
很多时候我发现,许多细节问题如果不加以整理很容易遗忘。在和群里的大佬沟通之后,我决定尝试养成在csdn上写笔记的习惯。
目前我还是LeetCode新手,刷题量不到五十,每一道简单题就要写一个小时(思路十分钟+写代码五十分钟以上),在编码时经常出现很多语法错误。提交的成功率也比较低。
本题是进制转换,之前没有接触过这类问题,所以我原创的方法是先对数num求以7为低的log,得到的对数就是转制后的数的长度-1。
比如100转化成7进制,log7(100)=2,那么转制后是三位数。然后对3做循环,分别求每一位的具体数字。
但是这样有一个问题,那就是没求一位数都要尝试多次指数运算,很耗费时间。
有竞赛经验的同学知道余数转制法,比如这道7进制的题目,求一次%7得到的余数就是转制后的某一位的数字,然后对num/7,得到新的num,进入下一次循环,直到num=0。
class Solution:
def convertToBase7(self, num: int) -> str:
if num==0:
return "0"
nums = []
flag = num<0
num = abs(num)
while num:
nums.append(str(num%7))
num //= 7
if flag:
nums.append("-")
return ''.join(nums[::-1])
这是源代码,本来非常简单,但是因为我之前python用得少,很多语法不懂。比如python的list,也就是列表,很像java和c的数组,但是功能更加多样,也可以当做栈。
我在尝试用整型列表转化为字符串的时候,用''.join(nums)这个函数,但是报错。后来我先把整型转化为字符,在把字符列表转化为字符串,''.join(nums)就不报错了。
还有nums[::-1]这个函数,用来转制非常方便,但是要注意它并不改变nums列表本身。
我之前写成了
nums[::-1]
return ''.join(nums)
得到的结果都是相反的。
以上。
最后
以上就是无限茉莉为你收集整理的刷题日常之LeetCode504,进制转换问题的全部内容,希望文章能够帮你解决刷题日常之LeetCode504,进制转换问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复