剑指offer64题
Uper2019
这个作者很懒,什么都没留下…
展开
-
字符串求和(大数加法)
题目描述输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**@param a = “1101”@param b = “1100”@return “11001”*/public String add(String a, String b){ }输入描述:...原创 2020-03-21 17:04:29 · 3343 阅读 · 0 评论 -
数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0思路:考虑以下几种情况:base=0时,0的任意次方都为0base=1时,1的任意次方都为1exponent=0时,任何数的0次方都为1exponent<0时, baseexponent =1 / baseexponen...原创 2020-03-21 16:31:05 · 284 阅读 · 0 评论 -
进制转换(大数除法+栈)
题目描述将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述:多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)输出描述:每行输出对应的二进制数。示例1输入0138输出01111000思路:输入数据的存储:C++中没有能够直接存储30位10进制的数据结构,所以对...原创 2020-03-20 17:05:13 · 294 阅读 · 0 评论 -
64剑指offer题目记录
目录01 最大公约数01 最大公约数小O学习了辗转相除法以后,就开始实践这个算法在求解最大公约数。小S给小O处理一道不同寻常的求解最大公约数:求解a和b的最大公约数,但是a和b的范围特别大。输入:第一行数字a,第二行数字b1<=a<=10105,1<=b<=10181<=a<=10^{10^5},1&am...原创 2019-08-07 16:34:30 · 330 阅读 · 0 评论 -
#CodeLog 03 第一个只出现一次的字符
题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).分析:其实主要还是hash,利用每个字母的ASCII码作hash来作为数组的index。首先,需要定义一个长度为58的数组来存储每个字母出现的次数。58的理由如下:因为区分大小写,大写A-Z对应的ASCII码为65-90...原创 2019-07-05 21:44:18 · 159 阅读 · 0 评论 -
#Code Log 02丑数
题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析通俗易懂的解释:首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我...原创 2019-07-05 19:40:17 · 128 阅读 · 0 评论 -
#Code Log 01把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接的所有数字中最小的一个。例如:输入数组{3,32,321},则打印出这三个数字中能排成的最小数字为321323.解题思路:对vector容器中的数据进行排序。按照 将a和b转为string后,若a+b< b+a,a排在前面 的规则排序。如 2,21 因为212<221,所以排序为21,2tips:函数to...原创 2019-07-05 19:17:26 · 114 阅读 · 0 评论 -
查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;}; 分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此...转载 2019-04-25 16:44:22 · 1068 阅读 · 0 评论 -
调整数组顺序是奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:创建两个数组,一个存储奇数,一个存储偶数,最后奇数在前,偶数在后,将两个数组合并。代码:void reOrderArray(vector<int> &array) { // ...原创 2019-04-25 16:26:21 · 107 阅读 · 0 评论 -
跳台阶,变态跳台阶,斐波那契及矩形覆盖 同类型剑指offer64题
在做剑指offer64题的时候,发现了四道题都是和斐波那契数列相关的题目,就在这里进行了总结:对于找规律的题目,都可以用递归来做。第一题:斐波那契数列斐波那契数列1 1 2 3 5 8 13 21 34 55…第一项和第2项都是1,从第三项开始,每一项等于第n-1项和n-2项的和,可以使用递归来实现。规律: f(n)=f(n-1)+f(n-2);class Solution {pub...原创 2019-04-24 20:15:42 · 144 阅读 · 0 评论 -
二进制中1的个数------剑指offer64题
题目:输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示。解析根据题目描述,第一反应是将数进行二进制分解然后统计一下1的个数,但是后来发现负数用补码表示。对于补码:正数:原码=补码=反码负数:原码, 反码=原码除符号位之外各位取反,补码=反码+1(如果加1之后有进位,要一直向前进位,包含符号位)所以打消了二进制分解后统计1的个数的想法。后来看别人的笔记发现了另一种方法:...原创 2019-04-24 20:02:32 · 144 阅读 · 0 评论