![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指
子春_贰叁
Because we are young and fearless
展开
-
数值的整数次方
实现函数double Power(double base, int exponent), 求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 考虑各种情况,如当指数n为负数时,需要将x变为倒数然后将指数变为正数,负数幂和正数幂相同,因为除以一个数就相当于乘这个数的倒数。 x^n 可以分解成若干个 x^i 的乘积 class Solution原创 2021-02-02 15:04:37 · 116 阅读 · 0 评论 -
剪绳子||
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 =原创 2021-02-02 14:57:48 · 85 阅读 · 0 评论 -
剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1), 每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少? 例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1 动态规划(常规解决方法),将剪一段长度为n的绳子分解为长度更小的子问题,避免子问题重复计算,我们将每原创 2021-02-02 14:55:15 · 109 阅读 · 0 评论 -
二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。 首先和1相与,可以判断出末位数是否为1,然后把1左移一位得到2,再与其相与,重复计算,可以得到二进制中1的个数,但是这种方原创 2021-02-02 14:45:38 · 104 阅读 · 0 评论 -
机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。 一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外), 也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] , 因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子? 示例 1: 输入:m = 2, n = 3, k = 1 输出:3 和上几篇的内容相似,都是采原创 2021-02-01 18:30:03 · 102 阅读 · 0 评论 -
单词搜索
给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成, 其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [ [‘A’,‘B’,‘C’,‘E’], [‘S’,‘F’,‘C’,‘S’], [‘A’,‘D’,‘E’,‘E’] ] 给定 word = “ABCCED”, 返回 true 给定 word = “SEE”, 返回 true 给定 word = “ABCB”, 返回 false 注原创 2021-02-01 17:29:57 · 137 阅读 · 1 评论 -
矩阵中的路径问题
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。 如果一条路径经过了矩阵的某一格, 那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。 [[“a”,“b”,“c”,“e”], [“s”,“f”,“c”,“s”], [“a”,“d”,“e”,“e”]] 但矩阵中不包含字符串“abfb”的路径, 因为字符串的第一个字符b占据了矩阵中的第一行原创 2021-02-01 17:27:45 · 387 阅读 · 1 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 第一眼看到题的想法是从头遍历一遍寻找,但是这种的时间复杂度为O(n),所以利用旋转数组特性和二分查找的思想来解决 通过观察,旋转数组可以分为两个排序子数组,前面数组元素大于后面数组元素,且最小元素处在分界位置,所以利用二分查找法,双指针原创 2021-02-01 17:17:34 · 83 阅读 · 0 评论 -
青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。 求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 与斐波那契数列一个思想,避免重复计算,提高效率,自下而上,注意最后取模即可 递归(会超时) class Solution { public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return原创 2021-02-01 17:04:29 · 90 阅读 · 0 评论 -
斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 注意:一定记得取模1e9+7(1000000007)!!! 在使用递归解决问题时,要记原创 2021-02-01 17:01:13 · 230 阅读 · 0 评论 -
用两个栈实现队列,和使用队列实现栈
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 注意:根据栈和队列的性质模拟即可 栈:先进后出,队列:先进先出 class CQueue {原创 2021-02-01 16:47:01 · 110 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 所给二叉树结构 ////Definition for a binary tree node. //struct TreeNode { // int val; // TreeNode *l原创 2021-01-31 16:14:42 · 95 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 所给链表结构 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ 注意:从尾到头打印,因为这里的链表是单向链表,所以原创 2021-01-31 16:06:25 · 79 阅读 · 0 评论 -
替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:"We%20are%20happy. 注意:从后向前插入的思想 class Solution { public: string replaceSpace(string s) { int count = 0; int m = 0; while (s[m] != '\0') { if (s[m] == ' ') count++; m++; }原创 2021-01-31 16:01:18 · 85 阅读 · 0 评论 -
二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数, 判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 注意:不要以左上角或者右下角的位置开始,如1是左上原创 2021-01-31 15:58:53 · 89 阅读 · 0 评论 -
数组中重复数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n - 1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了, 也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 : 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 注意:数组中的数字都在0~n-1中,如果不存在重复数字,那么数组排序后数字k将出现再下标k的位置。所以有些位置存在多个数字,有些位置可能没有数字 共三种解题方式,每种时间复杂度和空间复杂度均不同 先排序,再查找 时间复杂度O(n*原创 2021-01-31 15:51:04 · 155 阅读 · 0 评论