
剑指Offer题目答案收集
从最后一行开始遍历,逐行向上。 每一行中,从左向右遍历。 比较当前元素与目标数: 如果遍历完整个数组仍未找到,返回False。 初始化一个计数器记录空格的数量。 遍历字符串中的每个字符。 当遇到空格时,将其替换为"%20",并调整后续字符的位置。 替换后,扩展字符串的长度以避免索引越界。 确保替换过程正确处理索引位置,确保字符串完整性。
发布日期:2021-05-14 14:38:52
浏览次数:18
分类:精选文章
本文共 2675 字,大约阅读时间需要 8 分钟。
为了解决二维数组查找和字符串空格替换的问题,我们可以分别采用不同的方法来实现。
二维数组查找
我们需要找到二维数组中是否存在某个整数。由于二维数组中每一行从左到右递增,每一列从上到下递增,因此可以采用从下到上、从左到右的方式进行查找,以减少比较的次数。
步骤如下:
- 如果等于,返回True。
- 如果大于,继续检查下一列。
- 如果小于,继续检查下一行。
字符串空格替换
我们需要将字符串中的所有空格替换为"%20"。可以通过遍历每个字符来实现,并在遇到空格时进行替换。
步骤如下:
代码实现
Python版
二维数组查找:
def Find(target, array): rows = len(array) if rows == 0: return False cols = len(array[0]) i = rows - 1 j = 0 while i >= 0 and j <= cols: if array[i][j] == target: return True elif array[i][j] > target: j += 1 else: i -= 1 return False
字符串空格替换:
def replaceSpace(str): if not str: return str new_str = [] count = 0 for char in str: if char == ' ': new_str.append("%20") count += 1 else: new_str.append(char) # 计算替换后的长度 new_length = len(new_str) # 需要将结果拼接成一个字符串 result = ''.join(new_str) # 保留原长度不对的情况下,可能需要调整,但通常直接拼接即可 return result
C++版
二维数组查找:
#includeusing namespace std;bool Find(int target, vector > array) { int rows = array.size(); if (rows == 0) return false; int cols = array[0].size(); int i = rows - 1; int j = 0; while (i >= 0 && j <= cols) { if (array[i][j] == target) return true; if (array[i][j] > target) { j++; } else { i--; } } return false;}
字符串空格替换:
#includeusing namespace std;void replaceSpace(char *str, int length) { int count = 0; for (int i = 0; i < length; i++) { if (str[i] == ' ') { count++; } } int indexOld = length - 1; // 替换前的索引 int newLength = length + 2 * count; // 可能需要向上扩展至newLength // 创建一个足够大的新字符串 vector newStr(newLength); // 填充字符 for (int i = 0; i < length; i++) { newStr[i] = str[i]; } for (int i = 0; i < count; i++) { int pos = indexOld - (i * 2); if (pos < 0) { // 不应该出现这种情况,因为i从0开始,当pos是0时,i最多是count-1时也会P=2*i >=0 break; } newStr[pos] = '%'; newStr[pos+1] = '2'; newStr[pos+2] = '0'; } // 将newStr转换为字符串 string result(newStr.begin(), newStr.end()); // 根据原函数目的,返回新的字符串并替换空格 // 由于原str可能被销毁,我们需要将结果独立返回 string temporary(result); // 如果需要,返回原长度的字符串,可能不需要,但假设长度可以扩展 return temporary;}
总结
以上代码实现了二维数组查找和字符串空格替换的问题。通过分别遍历数组按行和列进行查找,或逐字符替换空格,确保在较少比较次数下解决问题,并考虑了字符串长度的扩展以避免索引错误。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月09日 21时56分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
软件工程应用
2021-05-14
数据科学
2021-05-14
函数与高级变量
2021-05-14
键盘事件
2021-05-14
注册页面案例
2021-05-14
np.bincount(x)的简单解释
2019-03-11
LeetCode Top-100 T22-括号生成
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
deepin 安装过程记录
2019-03-11
JAVA 多线程
2019-03-11
Java的 arraylist类【具体案例】
2019-03-11
牛客-链表中环的入口节点(Java)
2019-03-11
解决微信小程序中 calc 失效问题
2019-03-11
JS数组去重的方法
2019-03-11
堆的应用_topK算法和堆排序
2019-03-11
最大半连通子图
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
跳台阶
2019-03-11
另类加法,走方格的方案数,最近公共祖先
2019-03-11
线程学习5
2019-03-11