LeetCode Solutions
158. Read N Characters Given read4 II - Call Multiple Times
Time: $O(n)$ Space: $O(1)$
/**
* The read4 API is defined in the parent class Reader4.
* int read4(char *buf4);
*/
class Solution {
public:
/**
* @param buf Destination buffer
* @param n Number of characters to read
* @return The number of actual characters read
*/
int read(char* buf, int n) {
int i = 0; // buf's index
while (i < n) {
if (i4 == n4) { // All characters in buf4 are consumed
i4 = 0; // Reset buf4's index
n4 = read4(buf4); // Read 4 (or less) chars from file to buf4
if (n4 == 0) // Reach the EOF
return i;
}
buf[i++] = buf4[i4++];
}
return i;
}
private:
char* buf4 = new char[4];
int i4 = 0; // buf4's index
int n4 = 0; // buf4's size
};
/**
* The read4 API is defined in the parent class Reader4.
* int read4(char[] buf4);
*/
public class Solution extends Reader4 {
/**
* @param buf Destination buffer
* @param n Number of characters to read
* @return The number of actual characters read
*/
public int read(char[] buf, int n) {
int i = 0; // buf's index
while (i < n) {
if (i4 == n4) { // All characters in buf4 are consumed
i4 = 0; // Reset buf4's index
n4 = read4(buf4); // Read 4 (or less) chars from file to buf4
if (n4 == 0) // Reach the EOF
return i;
}
buf[i++] = buf4[i4++];
}
return i;
}
private char[] buf4 = new char[4];
private int i4 = 0; // buf4's index
private int n4 = 0; // buf4's size
}
# The read4 API is already defined for you.
# Def read4(buf4: List[str]) -> int:
class Solution:
def read(self, buf: List[str], n: int) -> int:
i = 0 # buf's index
while i < n:
if self.i4 == self.n4: # All characters in buf4 are consumed
self.i4 = 0 # Reset buf4's index
self.n4 = read4(self.buf4) # Read 4 (or less) chars from file to buf4
if self.n4 == 0: # Reach the EOF
return i
buf[i] = self.buf4[self.i4]
i += 1
self.i4 += 1
return i
buf4 = [' '] * 4
i4 = 0 # buf4's index
n4 = 0 # buf4's size