[leetcode]Read N Characters Given Read4

2422 ワード

read 4でreadnを実現...
一度呼び出すまで、どうやってもいいような気がします...この問題にIIがあるのは何度も呼び出されたと思います.の
何度も勇哥bufferがたくさん読んだ分だけ貯めておけばよかった気がします...
 
// 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
     */
    int read(char *buf, int n) {
        char buffer[5];
        int cnt = 0;
        while (cnt < n) {
            int sz = read4(buffer);
            memcpy(buf + cnt, buffer, sz);
            cnt += sz;
            if (sz < 4) break;
        }
        if (cnt > n) {
            buf[n] = '\0';
            cnt = n;
        }
        return cnt;
    }
};