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