想了好一会才看懂题目意思,应该是:
这里指的可以调用更多次,是指对一个文件多次操作,也就是对于一个case进行多次的readn操作。上一题是只进行一次reandn,所以每次返回的是文件的长度或者是n,并且将相应的字符存在buf里。现在调用多次的话就可能存在以下的例子:
例如文件case是:1,2,3,4,5,6,7
如果要实现read5,先用read4读四个到buf,再用read4读剩下的3个到buf+4之后,但是read5一次最多读5个到buf,所以read4多读的2个就要存起来,防止下次调用read5的时候用。
参见 这里 ,用全局变量记录之前访问的是否有溢出。
// Forward declaration of the read4 API. int read4( char * buf); class Solution { public : /* * * @param buf Destination buffer * @param n Maximum number of characters to read * @return The number of characters read */ Solution() : buf_len( 0 ) { } int read( char *buf, int n) { char buffer[ 5 ]; int cnt = 0 ; if (buf_len > 0 ) { memcpy(buf, _buf, min(buf_len, n)); cnt += min(buf_len, n); if (n < buf_len) { memcpy(_buf, _buf + n, buf_len - n); buf_len -= n; } else { buf_len = 0 ; } } int sz; while (cnt < n) { sz = read4(buffer); memcpy(buf + cnt, buffer, sz); cnt += sz; if (sz < 4 ) break ; } if (cnt > n) { buf[n] = ' \0 ' ; buf_len = cnt - n; memcpy(_buf, buffer + (sz- buf_len), buf_len); cnt = n; } return cnt; } private : int buf_len; char _buf[ 5 ]; };
leetcode[158] Read N Characters Given Read4 II - Call multiple times