剑指offer【11】- 矩形覆盖】的更多相关文章

剑指Offer:矩形覆盖[N1] 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目思考 我们先把2*8的覆盖方法记为f(8),用一个2*1的小矩形去覆盖大矩形的最右边时有两种选择,横着放或者竖着放, 此时左边的空间为f(6)或f(7),那么f(8)的放置结果为f(6)[右边横着放]+f(7)[右边竖着放] 找规律 f(n)=f(n-1)+f(n-2),斐波那契数列 Java题解 public clas…
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70),其中n为偶数. 输出: 对应每个测试案例, 输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数. 样例输入: 4 样例输出: 5 解题思路: 观察题目中的矩形,2*n的,是个长条形.本来脑中想象的是复杂的华容道,但是既然只是简单的长条形,那么…
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目地址 https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6?tpId=13&tqId=11163&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 以2…
一.题目: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 二.思路: 斐波那契数列 三.代码:     …
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法 java版本: public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第23项的结果是:"+RectCover(23)); long endTime=System…
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解题思路: 和跳台阶那道题差不多.分别以矩形的两条边长做拓展,即等于前两项的和. 代码: class Solution { public: int rectCover(int number) { vector<int> cover; cover.push_back(); cover.push_back(); cover.push_back(); ; i&…
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? [思路]可归纳得出结论: f(n) = f(n-1) + f(n-2), (n > 2). 另外: (1)1 * 3方块 覆 盖3*n区域:f(n) = f(n-1) + f(n - 3), (n > 3) (2)1 * 4方块 覆 盖4*n区域:f(n) = f(n-1) + f(n - 4),(n > 4) 更一般的结论,如果用1*m的方块覆盖m…
一.题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 二.输入描述 输入n 三.输出描述 输出有多少种不同的覆盖方法 四.牛客网提供的框架 class Solution { public: int rectCover(int number) { } }; 五.解题思路 与前面那道动态规划题大同小异. 六.代码 class Solution { public: int rectCover(int number…
题目: 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 分析: 假设2为高,n为宽 因为高为2固定,会出现固定情况,即无论怎么摆都是只有两种基本结构: 高度都是2不用考虑,长有1和2两种选择,将问题转换为:长为n的线段由长为1和长为2的线段组成,共有多少种组成方法. 思路和前面跳台阶类似 https://www.cnblogs.com/xiakecp/p/11585753.html 代码: function rectC…
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?   题解: 使用递归或者动态规划,明显,递归没有动态规划优   class Solution01 { public: int rectCover(int number) { )?:number; )+rectCover(number-); } }; class Solution02 { public: int rectCover(int number) {…
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路:与裴波拉契数列思路一致. public int RectCover(int target) { if(target<1){ return 0; } else if(target==2||target==1){ return target; } else{ return RectCover(target-1)…
题目:http://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6 C++ class Solution { public: int rectCover(int n) { || n == ) return n; , b = ; ) { a = a + b; b = a - b; } return a; } };…
[剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? Ways 还是费布拉奇数列.主要是明白这个思想呀-递推公式很简单. # -*- coding:utf-8 -*- class Solution: def __ini…
20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1. 示例一 输入:[3,4,5,1,2] 输出:1 示例二 输入:[2,2,2,0,1] 输出:0 class Solution { public int minArray(int[] numbers…
[剑指 Offer 11. 旋转数组的最小数字] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1. 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 方法1:使用自带的sort函数,对数组进行排序,然后取出第一个数值 class Solution { public: int…
该题目来源于牛客网<剑指offer>专题. 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 先放21,则f(n-1),先放12,则f(n-2). Go语言实现: func rectCover(n int) int { if n < 1 { return 0 } ​ if n == 1 || n == 2 { return n } ​ return rectCover(n-1) + rectCover(n-2)…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子.例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出).但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题代码 法一: public class Solution { public int NumberOf1(int n) { int cnt = 0; while(n != 0){ n &= (n - 1); cnt++; } return cnt; } } 法二: public int NumberOf1(int n) { return Integer.bitCount(n); }…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   //思想:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数     private static int NumberOf1_low(int n) {         int count = 0;         int flag = 1;         while (flag != 0) {             if ((n & flag) != 0) {            …
题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 我们一先想到的应该是循环两次链表,第一次获得它的长度,然后用长度-k,得出目标节点在链表的第几位,再循环一次. 如果要求只用一次循环的话,我们就要借助两个指针,第一个指针从立案表的头开始便利向前走k-1步,第二个指针不动:从k步开始,第二个指针也开始遍历,这样当第一个指针,到达队列尾部时,第二个指针刚刚好到达题目要求的位置. /* public class ListNode { int val; ListNode next = null…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目地址 https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tqId=11164&tPage=1&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking 思路 思路1: 从右往左逐位判…
输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. java版本: public class Solution { public int NumberOf1(int n) { String result = Integer.toBinaryString(n);//获取二进制的字符串 char[] arr=result.toCharArray();//将字符串转换为char字符数组 int count=0; for(int i=0;i<arr.length;i++){ if(arr[…
[思路]如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话).其余所有位将不会受到影响. 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1.减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了.这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整…
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解法:使用数学归纳法可得,跳n级台阶的跳法一共有f(n)=2n-1中,即本问题要求求解2的n次方,使用位左移运算实现 C++实现代码: class Solution { public: int jumpFloorII(int number) { return 1<<number-1; //位左移实现2的n次方计算 } };…
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.NOTE:给出的所有元素都大于0,若数组大小为0,请返回0.   第一种方法: 从头开始遍历,当遇到不满足非递减排序规律的那个数时,那就是旋转的边界数,然后将其与最左端的数比较,得到最小的数   第二种方法: 二分法[貌似测试的时间和空间复杂度都更大] 使用三个指针,左指针,右…
刷完剑指Offer很久了,前几天想起来去年开通的博客园,正好把刷题笔记整理一下 刷题平台:牛客网 刷题语言:Python **链表(8道)** [剑指Offer 3. 从尾到头打印链表 (链表)](https://www.cnblogs.com/huangqiancun/p/9775456.html) 剑指Offer 14. 链表中倒数第k个结点 (链表): https://www.cnblogs.com/huangqiancun/p/9782576.html 剑指Offer 15. 反转链表…
剑指 Offer 03. 数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2, 3, 1, 0, 2, 5} Output: 2 解题思路 要求时间复杂度 O(N),空间复杂度 O(1).因此不能使用排序的方法,也不能使用额外的标记数组. 对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第…
又开了一个笔记专题的坑,未来一两周希望能把<剑指Offer>的题目刷完…
LeetCode:"剑指 Offer" 刷题小菜鸡,花了几天时间做了一遍 LeetCode 上给出的 "剑指 Offer" 在此做一下记录 LeetCode主页:贤余超 剑指 Offer 03. 数组中重复的数字 // 方法1: // hash表来做:空间换时间的思想 // 时间复杂度 O(n) // 空间复杂度 O(n) public int findRepeatNumber(int[] nums) { Set<Integer> hashset = n…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子.例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18.但它不能进入方格(35, 38),因为3+5+3+8=19.请问该机器人能够到达多少个格子? 思路 与[Java] 剑指offer(11)…