158. Read N Characters Given Read4 II - Call multiple times

本文介绍了一种利用read4 API实现read函数的方法,该函数可以从文件中读取指定数量的字符。通过维护一个缓冲区和跟踪读取位置的状态,确保了read函数可以被多次调用,并且每次都能正确返回剩余的字符。
摘要由CSDN通过智能技术生成

https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/description/

The API: int read4(char *buf) reads 4 characters at a time from a file.

The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.

By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file.

Note:
The read function may be called multiple times.

Example 1: 

Given buf = "abc"
read("abc", 1) // returns "a"
read("abc", 2); // returns "bc"
read("abc", 1); // returns ""

Example 2: 

Given buf = "abc"
read("abc", 4) // returns "abc"
read("abc", 1); // returns ""
class Solution(object):
    def __init__(self):
        self.buf4 = ['']*4
        self.start = 0
        self.end = 0
        
    def read(self, buf, n):
        """
        :type buf: Destination buffer (List[str])
        :type n: Maximum number of characters to read (int)
        :rtype: The number of characters read (int)
        """
        idx = 0
        while self.start < self.end and idx < n:
            buf[idx] = self.buf4[self.start]
            self.start += 1
            idx += 1
        
        if self.start == self.end:
            self.start, self.end = 0, 0

        while idx < n :
            self.end = read4(self.buf4)
            
            if self.end == 0:
                break
        
            i = 0
            while i < min(self.end, n-idx):
                buf[idx+i] = self.buf4[i]
                i += 1
            
            self.start = i
            idx += i
    
        return idx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值