2015年10月6日星期二

Read N Characters Given Read4 leetcode

The API: int read4(char *buf) reads 4 characters at a time from a file.
The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.
By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file.
Note:
The read function will only be called once for each test case.
每次read4读到的字符放入一个数组里, 然后把数组里面的值拷贝到buffer内
concer case1: 在i = n - 1 时如果我们的read4 读了多个字符(长度len) , 那么我们存入buf数组中的个数应为Math.min(n - i, len)
case2: 如果len < 4 说明数组已经读完了 这时候返回的长度应该是Math.min(i + len, n)
public class Solution extends Reader4 {

    public int read(char[] buf, int n) {
        char[] tem = new char[4];
        int index = 0;
        for (int i = 0; i < n; i+= 4) {
            int len = read4(tem);
            for (int j = 0; j < Math.min(len, n - i); j++) {//case1
                buf[index++] = tem[j];
            }
            if (len < 4) {//case 2
                return Math.min(i + len, n);
            }
        }//如果循环内没有返回 说明读取字符数为4的倍数
        return n;
    }
}

没有评论:

发表评论