剑指Offer刷题(python版)

牛客网上只支持python 2.7版本,实际和3.0及以上版本有区别。

第一天:

二维数组查找的问题:

解题思路:

例如数组: 1 2 8 9

                     2 4 9 12

                     4 7 10 13

                     6 8 11 15

首先看二维数组中右上角的数字,如果该数字等于要查找的数字,则查找结束;如果该数字大于要查找的数字,则剔除这一列;如果该数字小于要查找的数字,则剔除该数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围内剔除一行或者一列,每一步都可以缩小范围,直到找到要查找的数字,或者查找范围为空。

例如,要查找7,首先比较7和9,9大于7,则删除第4列;再比较7和8,8大于7,则删除第3列。这时数组为{[1,2],[2,4],[4,7],[6,8]}。再比较2和7,2小于7,则删除第1行;再比较4和7,则删除第二行,再比较7和7,查找完成。

替换字符串问题:

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题思路:这题用Python来做非常投机取巧,因为为python中字符串操作有replace()这个BIF。所以只需要用20%替换‘ ’就可以。

                                                                                                                                                                      

时间: 2024-10-28 06:43:36

剑指Offer刷题(python版)的相关文章

剑指offer系列之二十六:输出字符串的全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母顺序输出. 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 此题与剑指offer原题存在一些初入,在原题中并没有规定字符串中字符是否有重复的出现.不过思路是一致的,只不过是添加额外的判断罢了.下面说说我的思路吧:先不考虑是否出现重读字符,要对一个字符进行全排列,可以

剑指offer系列之十二:调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 这道题第一思路自然是这样的:从头开始遍历这个数组,如果遇到偶数就把这个数之后的所有数往前移动一位,这样数组会留出一个空位,移动完毕之后把该偶数放到该空位即可.这样处理的话需要两次循环,一次是遍历,另一次是移位,所以时间复杂度是O(n2).下面是这种思路的实现代码(已被牛客AC): public void reOrd

《剑指offer》二叉树镜像

剑指offer简单题,但是能一下写对也需要小心考虑细节. 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ

[剑指Offer] 第4章课后题详解

[剑指Offer] 第4章课后题详解 目录 剑指Offer 第4章课后题详解 目录 二叉树的镜像 分析 解法 拓展 判断前序遍历 分析 解法 拓展 字符的组合 分析 解答 正方体的顶点 分析 解法 8个皇后 分析 解法 二叉树的镜像 本题为<剑指Offer>"面试题19:二叉树的镜像"一节中的"本题拓展". 请完成一个函数,输入一个二叉树,该函数输出它的镜像,要求使用循环的方法,不能用递归.二叉树节点定义如下: struct BinaryTreeNode

[剑指Offer] 第5章课后题详解

[剑指Offer] 第5章课后题详解 目录 剑指Offer 第5章课后题详解 目录 删除指定字符 分析 解法 优化 删除重复元素 分析 解法 判断变位词 分析 解法 求助 删除指定字符 本题为<剑指Offer>"面试题35:第一个只出现一次的字符"一节中的"相关题目". 定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现过的所有字符. 分析 字符是一个长度为8的数据类型,共256种可能.创建一个长度为256的bool型数组,数组下标为

[剑指Offer] 第3章课后题详解

[剑指Offer] 第3章课后题详解 目录 剑指Offer 第3章课后题详解 目录 大数加法 分析 解法 优化 链表的中间节点 分析 解法 环形链表 分析 解法 反转链表 分析 解法 大数加法 本题为<剑指Offer>"面试题12:打印1到最大的n位数"一节中的"相关题目". 定义一个函数,在该函数中可以实现任意两个整数的加法. 分析 由于没有限定输入两个数的大小范围,所以需要把它当做大数问题来处理.大数无法用int,long甚至long long类型来

[剑指Offer] 第2章课后题详解

[剑指Offer] 第2章课后题详解 目录 剑指Offer 第2章课后题详解 目录 有序数组的插入 分析 正常解法 非主流解法 两个队列实现栈 分析 解法 2的整数次方 分析 解法 不同位数 分析 解法 有序数组的插入 本题为<剑指Offer>"面试题4:替换空格"一节中的"相关题目". 有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2.请实现一个函数,把A2中的所有数字插入到A1中并且所有数字是排序的. 分析 其实这道题就是实现一

《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉想到用二进制的位运算.最后写出来是一个迭代的过程. 每次迭代先计算x和y的和但不处理进位,那么相当于做异或,得到res1 然后处理进位问题,相当于计算与运算,得到res2 那么res2左移1位,再加到res1上,则整个运算的最终结果转化为res1+(res2<<1) 因为res2做左移,总会减小到

剑指offer之字符串转整数

题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例, 若输入为一个合法的字符串(即代表一个整数),则输出这个整数. 若输入为一个非法的字符串,则输出"My God". 样例输入:5-5+8样例输出:5-58    关于这道题目,题目本身还是不错的,真正核心的代码也就那么两行,大部分代码基