原题连接:https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/
这道题是http://blog.youkuaiyun.com/foolnote/article/details/50621629的升级版,这里要求目标函数能够被多次调用。所以出现了一个情况,就是上次read4()读回来的字符还没完全被取完。我们要先去buffer里面取,取不到了后才再次调用read4()函数去读字符。
代码如下:
public class Solution extends Reader4 {
/**
* @param buf Destination buffer
* @param n Maximum number of characters to read
* @return The number of characters read
*/
int index = 0;
int count = 0;
char[] buffer4 = new char[4];
public int read(char[] buf, int n) {
int actRead = 0;
boolean isEnd = false;
while(!isEnd && actRead<n)
{
if(count == 0)
{
count = read4(buffer4);
if(count<4)
isEnd = true;
}
while(count>0 && actRead<n)
{
buf[actRead] = buffer4[index];
actRead++;
index++;
count--;
index = index%4;
}
}
return actRead;
}
}