随笔分类 - 剑指offer
摘要:1 题目 输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999. 2 思路 1.由于没有确定输入n的范围,当输入n很大的时候,会存在需要输出的数的类型溢出问题。 2.在字符串上模拟加法的解放。 3.只有对“9999”加1的时候,才会在第一位上,产生进
阅读全文
摘要:1 题目 有一个长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1且m>1)每段绳子的长度记为k[0]、k[1]...k[m-1],求每一段相乘最大为多少? 2 思路 在剪第一刀的时候,我们有n-1种可能选择,分别是1,2,3,,n-1.因此f(n)=max(f(i)f(n-i))。 由于是自
阅读全文
摘要:1 题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 2 思路 1.由于负数右移会在最左边补1,因此不能右移,否则可能陷入死循环 2.首先判断n和1做与运算判断n的最低位是不是为1.接着把1左移一位得2,再和n做与运算,就能判断n的磁低位是不是1……,反复左移,每次都能判断n的
阅读全文
摘要:1 题目 实现函数double Power(double base, int exponent),求base的 exponent次方。 不得使用库函数,同时不需要考虑大数问题 2 思路 需要考虑到输入exponent 为负数的情况,可以先对指数求绝对值,算出次方的结果后再取倒数 当exponent
阅读全文
摘要:1 题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7=18。但是,它不能进入方格(35,38),因为3+5+
阅读全文
摘要:1 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如在下面的3x4的矩阵中包含一条字符串"bcced"的路
阅读全文
摘要:1 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 2 思路 我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的
阅读全文
摘要:1 题目 题目:求斐波那契数列。写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 2 思路 效率低的解法: long long Fibonacci(unsigned int n) { if(n<=0) return 0; if(n==1) return 1; return Fib
阅读全文
摘要:1 题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 2 思路 以上图中的树为例,其中序遍历序列是:d,b,h,e,i,a,f,c,g。 找一个结点在中序遍历序列中的下一个结点共有三种不同的情况: 1)如果一
阅读全文
摘要:1 题目 用两个站实现一个队列,队列的函数appendTail 和 delteHead(),分别完成在队列的尾部插入插入节点和队列的头部删除节点。 2 思路 1)添加,每次添加,都相应的对栈A添加元素。 2)删除操作。首先判断栈B是否为空?step1:如果B为空,则判断A是否为空?如果A也为空,则输
阅读全文
摘要:1 题目 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示的二叉树并输出它的头结点。 2 思路 1)首先确定
阅读全文
摘要:1 题目: 输入一个链表的头结点,从尾到头打印每个节点的值。链表定义如下: struct ListNode { int m_nkey; ListNode* m_pNext; } 2 思路 由于遍历的顺序是从头到尾,而输出的顺序是从尾到头,典型的后进先出,可以利用栈实现这种顺序。每经过一个节点,将其存
阅读全文
摘要:1 题目 请实现一个函数,吧字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。 2 思路 先遍历一次字符串,统计字符串中空格的总数。然后计算出替换后字符串的长度。 从字符串的后面向前开始复制替换。首先准备两个指针:p1和p2,p
阅读全文
摘要:1 题目:二维数组的查找 题目:在一个二维数组中,每一行都按照从左到右的递增的顺序排序。每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 2 思路 首先选取数组中的右上角数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要
阅读全文
摘要:1 题目:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次,请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复得的数字2或者3. 2
阅读全文
摘要:1 实现singleton模式 题目:设计一个类,我们只能生成该类的一个实例 2 解法一 思路: 1.将构造函数设置为私有函数禁止直接创造实例。 2.定义静态实例,在需要的时候创建 class Singleton { private: singleton(){};//对外禁用构造函数 singlet
阅读全文
摘要:1 赋值运算符函数 题目:如下为类型CMyString 的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char*pData = nullptr); CMyString(const CMyString& str); ~CMystring(
阅读全文

浙公网安备 33010602011771号