【LeetCode刷题】504七进制数 || 806 写字符串需要的行数

本文介绍了一种将十进制整数转换为七进制字符串的方法,以及如何计算并返回字符串在特定宽度限制下的行数及最后一行宽度的算法。前者通过反复取余和整除实现,后者通过遍历字符串并累加字符宽度,当超过最大宽度时增加行数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

504、七进制数

给定一个整数,将其转化为7进制,并以字符串的方式输出

示例:
输入:100
输出:‘202’

输入:-7
输出:’-10’

注意:输入范围是【-1e7,1e7】

solution: 按照进制数的定义来做,对7取余数,为每一位上的数字,下一个被除数为上一个数对7进行整数除法,并对0进行判断

class Solution(object):
    def convertToBase7(self,num):
        if not num:
            return str(num)

        res = ''

        num_abs = abs(num)
        i=0
        while num_abs:
            print("step:",i)
            rest_num = num_abs%7
            print ("%:",rest_num)
            num_abs = num_abs //7
            print ("//",num_abs)
            res += str(rest_num)
            i +=1

        if num < 0:
            return '-'+res[::-1]
        else:
            return res[::-1]

solution = Solution()
print(solution.convertToBase7(20))

806、写字符串需要的行数

我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。

现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。

示例 1:

输入:
widths=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = “abcdefghijklmnopqrstuvwxyz”
输出: [3, 60]
解释:所有的字符拥有相同的占用单位10。所以书写所有的26个字母,
我们需要2个整行和占用60个单位的一行。

示例 2:
输入:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = “bbbcccdddaaa”
输出: [2, 4]

解释:
除去字母’a’所有的字符都是相同的单位10,并且字符串 “bbbcccdddaa” 将会覆盖 9 * 10 + 2 * 4 = 98 个单位.最后一个字母 ‘a’ 将会被写到第二行,因为第一行只剩下2个单位了。所以,这个答案是2行,第二行有4个单位宽度。

Solution: (遍历字符串,统计长度的和,如果大于100则count加1,sum变为最后一个加上的值;最后对sum进行判断,有则count加1.[这里使用的ord()方法是返回对应字符的ASCII码,a的ASCII码为97,从而对应widths数组中对应字符的宽度])

class Solution(object):
    def numberOfLines(self, widths, S):
        """
        :type widths: List[int]
        :type S: str
        :rtype: List[int]
        """
        sums, count = 0, 0

        for each in S:
            sums += widths[ord(each) - 97]
            if sums > 100:
                count += 1
                # sums = widths[ord(each) - 97]
                sums = sums-100

        if sums:
            count += 1

        return [count, sums]
solution = Solution()
print(solution.numberOfLines([10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],
                             "abcdefghijklmnopqrstuvwxyz"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy_lf

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值