想了好一會才看懂題目意思,應該是:
這里指的可以調用更多次,是指對一個文件多次操作,也就是對于一個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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

