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
本文介绍了一种利用read4 API实现read函数的方法,该函数可以从文件中读取指定数量的字符。通过维护一个缓冲区和跟踪读取位置的状态,确保了read函数可以被多次调用,并且每次都能正确返回剩余的字符。

9782

被折叠的 条评论
为什么被折叠?



