C++实现LeetCode(157.用Read4来读取N个字符)
[LeetCode] 157. Read N Characters Given Read4 用Read4来读取N个字符
Given a file and assume that you can only read the file using a given method read4, implement a method to read n characters.
Method read4:
The API read4 reads 4 consecutive characters from the file, then writes those characters into the buffer array buf.
The return value is the number of actual characters read.
Note that read4() has its own file pointer, much like FILE *fp in C.
Definition of read4:
Parameter:char[] bufBelow is a high level example of how read4 works:
Returns:int
Note: buf[] is destination not source, the results from read4 will be copied to buf[]
File file("abcdefghijk"); // File is "abcdefghijk", initially file pointer (fp) points to 'a'char[] buf = new char[4]; // Create buffer with enough space to store charactersread4(buf); // read4 returns 4. Now buf = "abcd", fp points to 'e'read4(buf); // read4 returns 4. Now buf = "efgh", fp points to 'i'read4(buf); // read4 returns 3. Now buf = "ijk", fp points to end of file
Method read:
By using the read4 method, implement the method read that reads n characters from the file and store it in the buffer array buf. Consider that you cannot manipulate the file directly.
The return value is the number of actual characters read.
Definition of read:
Parameters: char[] buf, int nExample 1:
Returns: int
Note: buf[] is destination not source, you will need to write the results to buf[]
Input: file = "abc", n = 4Example 2:
Output: 3
Explanation: After calling your read method, buf should contain "abc". We read a total of 3 characters from the file, so return 3. Note that "abc" is the file's content, not buf. buf is the destination buffer that you will have to write the results to.
Input: file = "abcde", n = 5Example 3:
Output: 5
Explanation: After calling your read method, buf should contain "abcde". We read a total of 5 characters from the file, so return 5.
Input: file = "abcdABCD1234", n = 12Example 4:
Output: 12
Explanation: After calling your read method, buf should contain "abcdABCD1234". We read a total of 12 characters from the file, so return 12.
Input: file = "leetcode", n = 5Note:
Output: 5
Explanation: After calling your read method, buf should contain "leetc". We read a total of 5 characters from the file, so return 5.
- Consider that you cannot manipulate the file directly, the file is only accesible for read4 but not for read.
- The read function will only be called once for each test case.
- You may assume the destination buffer array, buf, is guaranteed to have enough space for storing n characters.
解法一:
// Forward declaration of the read4 API.int read4(char *buf); class Solution {public:int read(char *buf, int n) {int res = 0; for (int i = 0; i <= n / 4; ++i) {int cur = read4(buf + res); if (cur == 0) break; res += cur; }return min(res, n); }};
下面来看递归的解法,这个也不难,对 buf 调用 read4 函数,然后判断返回值t,如果返回值t大于等于n,说明此时n不大于4,直接返回n即可,如果此返回值t小于4,直接返回t即可,如果都不是,则直接返回调用递归函数加上4,其中递归函数的 buf 应往后推4个字符,此时n变成n-4即可,参见代码如下:
解法二:
// Forward declaration of the read4 API.int read4(char *buf); class Solution {public:int read(char *buf, int n) {int t = read4(buf); if (t >= n) return n; if (t < 4) return t; return 4 + read(&buf[4], n - 4); }};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/157
类似题目:
Read N Characters Given Read4 II - Call multiple times
参考资料:
https://leetcode.com/problems/read-n-characters-given-read4/
https://leetcode.com/problems/read-n-characters-given-read4/discuss/49557/Accepted-clean-java-solution
https://leetcode.com/problems/read-n-characters-given-read4/discuss/49496/Another-accepted-Java-solution
【C++实现LeetCode(157.用Read4来读取N个字符)】到此这篇关于C++实现LeetCode(157.用Read4来读取N个字符)的文章就介绍到这了,更多相关C++实现用Read4来读取N个字符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- java中如何实现重建二叉树
- leetcode|leetcode 92. 反转链表 II
- 人脸识别|【人脸识别系列】| 实现自动化妆