158. Read N Characters Given Read4 II - Call multiple times
题目链接:https://leetcode.com/problems...
和那道read n不同的是这次call multiple times,问题就是当前的call可能存在多读了几个字节,那么下一次call read的时候要先算上上次多读的部分,所以要保存上次读的。和读一次一样有两种要考虑的case:
file读完了: read4(buf[]) == 0
file没读完,但是buf装满了read4(buf[]) > n - res
public class Solution extends Reader4 {
/**
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
char[] buff = new char[4];
int start = 0;
int num = 0;
public int read(char[] buf, int n) {
int res = 0;
while(res < n) {
// no previous buff remain
if(start == 0) num = read4(buff);
// finish reading
if(num == 0) break;
// count the remain char to use for next call: start is the next start
while(res < n && start < num) buf[res++] = buff[start++];
// clear start if read all: n - res >= num - start
if(start == num) start = 0;
}
return res;
}
}
157. Read N Characters Given Read4
public int read(char[] buf, int n) {
int res = 0;
char[] temp = new char[4];
while(res < n) {
int cur = read4(temp);
if(cur == 0) break;
int num = Math.min(cur, n - res);
for(int j = 0; j < num; j++) buf[res++] = temp[j];
}
return res;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。