题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字符串,每次可以翻译一个或者两个,但是翻译两个的时候还要判断是否为有效的,像 01.02 这种的数字就是无效的,同时超过 25 也是无效的,因此这些不能被翻译.然后我们可以得出状态转移方程: \[dp[i] = \begin{cases} dp[i-1]+dp[i-2] & ,前两个数字组成的结果在1…
剑指 Offer 46. 把数字翻译成字符串 Offer_46 题目描述 题解分析 本题的解题思路是使用动态规划,首先得出递推公式如下 dp[i] = dp[i-1]+dp[i-2](如果s[i-1]+s[i]可以形成合法的数字:10-25) dp[i] = dp[i-1](如果s[i-1]+s[i]不能形成合法的数字:小于10或者大于25) 动态规划要注意数组的大小,需要多开一个元素的空间. java代码 package com.walegarrett.offer; /** * @Author…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻译成"b",……,11翻译成"l",……,25翻译成"z".一个数字可能有多个翻译.例如12258有5种不同的翻译,它们分别"bccfi", "bwfi", "bczi"…
题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 翻译成 "z".一个数字可能有多个翻译.请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法. 示例1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi"…
题目信息 时间: 2019-07-02 题目链接:Leetcode tag: 动态规划 难易程度:中等 题目描述: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 翻译成 "z".一个数字可能有多个翻译.请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法. 示例: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是…
题目要求: 给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”...25翻译成“z”.一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi.实现一个函数,用来计算一个数字有多少种不同的翻译方法. 解题思路: 下面我们从自上而下和自下而上两种角度分析这道题目,以12258为例: 自上而下,从最大的问题开始,递归 : 有很多子问题被多次计算,比如258被翻译成几种这个子问题就被计算了两次. 自然想到可以用动态规划来解决,用f(i…
/* 题目: 给定一个数字,将0~25依次翻译为a~z,计算有多少种翻译方法. */ /* 思路: 动态规划法 */ #include<iostream> #include<cstring> #include<vector> #include<algorithm> using namespace std; int GetTranslationCount(string number){ int length = number.size(); if(length…
题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; } } 复杂度分析 时间复杂度:\(O(NlogN)\) 空间复杂度:\(O(1)\) 思路2(哈…
题目 剑指 Offer 53 - I. 在排序数组中查找数字 I 思路1 一般来说,首先想到的是使用一个变量,从头开始遍历整个数组,记录target数组出现的次数,但是这样的时间复杂度是O(n),还是不够高效 题目说了,是排序数组,一想到排序数组,我们可以想到使用二分法: 找出第一个target所在的位置和最后一个target所在的位置,那么出现的次数就是end - start + 1了 代码 class Solution { public int search(int[] nums, int…
题目 剑指 Offer 53 - II. 0-n-1中缺失的数字 思路1 排序数组找数字使用二分法 通过题目,我们可以得到一个规律: 如果数组的索引值和该位置的值相等,说明还未缺失数字 一旦不相等了,从左到右第一个不相等位置的索引值就是缺失的数字的值 所以我们使用二分法查找第一个索引值和数组的值不相等的位置,此时索引值就是我们要的结果了 如果没有缺失,就输出数组的长度 代码 class Solution { public int missingNumber(int[] nums) { int l…