博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Read N Characters Given Read4 用Read4来读取N个字符
阅读量:4949 次
发布时间:2019-06-11

本文共 1399 字,大约阅读时间需要 4 分钟。

 

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函数,每次可以从一个文件中最多读出4个字符,如果文件中的字符不足4个字符时,返回准确的当前剩余的字符数。现在让我们实现一个最多能读取n个字符的函数。这题有迭代和递归的两种解法,我们先来看迭代的方法,思路是我们每4个读一次,然后把读出的结果判断一下,如果为0的话,说明此时的buf已经被读完,跳出循环,直接返回res和n之中的较小值。否则一直读入,直到读完n个字符,循环结束,最后再返回res和n之中的较小值,参见代码如下:

 

解法一:

// 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);    }};

 

类似题目:

 

参考资料:

 

转载于:https://www.cnblogs.com/grandyang/p/5174322.html

你可能感兴趣的文章
Azure 配置 PostgreSQL streaming replication
查看>>
mysql 安装卸载自动化脚本
查看>>
关于windou环境下使用http或者ftp搭建网络hu共享
查看>>
关于华为服务器 双路E52620安装系统时遇到的问题
查看>>
大数据培训第一天总结
查看>>
Neo4j (3.3.9)的学习之路(1)
查看>>
h5-面试题
查看>>
顶部下拉展示页面
查看>>
arr.push('')
查看>>
CSS3 counter计数器
查看>>
文字超出省略
查看>>
this.props.match
查看>>
react-Zmage图片缩放组件
查看>>
自定义Loading组件
查看>>
React Transition Group -- CSSTransition 组件
查看>>
类微信图片浏览组件
查看>>
头像后加_Avatar防止变相
查看>>
灰度发布策略
查看>>
Kafka DockerFile
查看>>
webpackContext
查看>>