中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

用織夢(mèng)的網(wǎng)站怎么做推廣廣州最新疫情最新消息

用織夢(mèng)的網(wǎng)站怎么做推廣,廣州最新疫情最新消息,用群暉做網(wǎng)站服務(wù)器,企業(yè)信用等級(jí)查詢系統(tǒng)一、解碼方法II(解碼方法I的升級(jí)版) 在I的基礎(chǔ)上增加了*,可以代替1-9中任意一個(gè)數(shù)字,求解碼的方法有多少種 輸入:s "*" 輸出:9 解釋:這一條編碼消息可以表示 "1"、"…

一、解碼方法II(解碼方法I的升級(jí)版)

在I的基礎(chǔ)上增加了*,可以代替1-9中任意一個(gè)數(shù)字,求解碼的方法有多少種

輸入:s = "*"
輸出:9
解釋:這一條編碼消息可以表示 "1"、"2"、"3"、"4"、"5"、"6"、"7"、"8" 或 "9" 中的任意一條。
可以分別解碼成字符串 "A"、"B"、"C"、"D"、"E"、"F"、"G"、"H" 和 "I" 。
因此,"*" 總共有 9 種解碼方法。
思路:

回顧一下上一題的思路:

1.如果遍歷到的該位數(shù)字不是0,那么dp[i+1]=dp[i];

2.如果遍歷到的數(shù)字可以和放一個(gè)數(shù)字構(gòu)成一個(gè)有效的大寫字母的ASCII值,是對(duì)dp[i+1]有用的,(這個(gè)有用是指多了dp[i-1]種分割方法)那么dp[i+1]+=dp[i-1];

那么這一道題的思路是?

1.如果遍歷到的字符是*,

? ? 1.1? 那么不論上一個(gè)字符是什么,首先dp[i+1]=dp[i]*9;

? ? 1.2? 如果上一個(gè)字符是'1',那么dp[i+1]+=dp[i-1]*9

? ? 1.3 如果上一個(gè)字符是'2',那么dp[i+1]+=dp[i-1]*6(1->6)

? ? ?1.4 其他情況均無法構(gòu)成有效的大寫字母

2.如果遍歷到的字符不是'*'

? ? ? 2.1 如果不是0,那么就可以切割。dp[i+1]=dp[i];

? ? ? 2.2 如果上一個(gè)字符是'1',dp[i+1]+=dp[i-1]

? ? ? 2.3 如果上一個(gè)字符是'1',且當(dāng)前的字符是'0'->'7',dp[i+1]+=dp[i-1]

? ? ? 2.4 如果上一個(gè)字符是'*',且當(dāng)前字符是'0'->'7',dp[i+1]+=2*dp[i-1]

? ? ? 2.5?如果上一個(gè)字符是'*',且當(dāng)前字符不是'0'->'7',dp[i+1]+=dp[i-1]

?代碼:
/*** 如果新加的一個(gè)字母是* 并且前一個(gè)數(shù)字是<=2的 直接+9* 前一個(gè)數(shù)字是*,直接+16* 解碼方法I* 如果新加的數(shù)字可以和前面數(shù)字組成一個(gè)有效的大寫字母 那么dp[i+1]=dp[i]+dp[i-1]* 如果不能組成dp[i+1]=dp[i]*/
class Solution {public int numDecodings(String s) {int mod = 1000000007;int size = s.length();long[] dp = new long[size + 1];dp[0] = 1;dp[1] = (s.charAt(0) == '*') ? 9 : 1;if (s.charAt(0) == '0')return 0;for (int i = 1; i < size; i++) {// 開始分情況if (s.charAt(i) == '*') {dp[i + 1] += dp[i] * 9;if (s.charAt(i - 1) == '1') {dp[i + 1] += dp[i - 1] * 9;} else if (s.charAt(i - 1) == '2') {dp[i + 1] += dp[i - 1] * 6;} else if (s.charAt(i - 1) == '*') {dp[i + 1] += dp[i - 1] * 15;}} else {if (s.charAt(i) != '0')dp[i + 1] = dp[i];if (s.charAt(i - 1) == '1')dp[i + 1] += dp[i - 1];else if (s.charAt(i - 1) == '2' && s.charAt(i) < '7')dp[i + 1] += dp[i - 1];else if (s.charAt(i - 1) == '*') {if (s.charAt(i) < '7')dp[i + 1] += 2 * dp[i - 1];elsedp[i + 1] += dp[i - 1];}}dp[i+1] %= mod;}return (int) dp[s.length()];}
}

二、丑數(shù)II

給你一個(gè)整數(shù)?n?,請(qǐng)你找出并返回第?n?個(gè)?丑數(shù)?。丑數(shù)?就是質(zhì)因子只包含?2、3?和?5?的正整數(shù)。

輸入:n = 10
輸出:12
解釋:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 個(gè)丑數(shù)組成的序列。
思路:

首先明白丑數(shù)的概念,質(zhì)因子只包括2、3、5的正整數(shù)。因此可以推斷出一個(gè)丑數(shù)必定是由x個(gè)2、y個(gè)3,z個(gè)5組成的。即n=2*x+3*y+5*z

那么我們?nèi)绾螌ふ业趎個(gè)丑數(shù),可以使用數(shù)組,把n個(gè)丑數(shù)都求出來,那么如何判斷第a個(gè)丑數(shù)是什么?

根據(jù)題目可知,1也是一個(gè)丑數(shù),那么arr[0]=1;然后開始遍歷:

arr[i]的值就從Math.min(arr[i2]*2,Math.min(arr[i3]*3,arr[i5]*5))中取

幫助理解:

現(xiàn)在丑數(shù)中有{1,2},在上一步中,1已經(jīng)同2相乘過了,所以今后沒必要再比較1×2了,我們說1失去了同2相乘的資格。

現(xiàn)在1有與3,5相乘的資格,2有與2,3,5相乘的資格,但是2×3和2×5是沒必要比較的,因?yàn)橛斜人〉?可以同3,5相乘,所以我們只需要比較1×3,1×5,2×2。

代碼:
class Solution {public int nthUglyNumber(int n) {int[] dp=new int[n];dp[0]=1;int i2=0,i3=0,i5=0;for(int i=1;i<n;i++){dp[i]=Math.min(dp[i2]*2,Math.min(dp[i3]*3,dp[i5]*5));if(dp[i]==dp[i2]*2)i2++;if(dp[i]==dp[i3]*3)i3++;if(dp[i]==dp[i5]*5)i5++;}return dp[n-1];}
}

三、超級(jí)丑數(shù)(類似于丑數(shù)II)

區(qū)別:

和丑數(shù)II的區(qū)別就是,丑數(shù)II的質(zhì)因數(shù)只有2、3、5。而超級(jí)丑數(shù)的質(zhì)因數(shù)的題目中給的。

思路:

使用一個(gè)map集合記錄因數(shù)以及該因數(shù)參與的最近一次超級(jí)丑數(shù)的下標(biāo)?

key:質(zhì)因數(shù)

value:該因數(shù)參與的最近一次超級(jí)丑數(shù)的下標(biāo)? 類似于丑數(shù)II中的i2,i3,i5

dp[i]每次依然從dp[x]*primes[i]中選擇一個(gè)最小的

代碼:
class Solution {public int nthSuperUglyNumber(int n, int[] primes) {Map<Integer,Integer> map=new HashMap<>();for(int i:primes){map.put(i,0);}long[] dp=new long[n];dp[0]=1;for(int i=1;i<n;i++){Set<Integer> keys=map.keySet();long min=Long.MAX_VALUE;//找出最小值 也就是dp[i]放誰for(Integer key:keys){int value=map.get(key);if(dp[value]*key<min)min=dp[value]*key;}//找出最小值是由哪一個(gè)質(zhì)數(shù)得到的 value+1for(Integer key:keys){int value=map.get(key);if(min/dp[value]==key)map.put(key,map.get(key)+1);}dp[i]=min;}return (int)dp[n-1];}
}

四、青蛙過河(dp)

題意:給定一個(gè)數(shù)組stones[],代表每個(gè)單元格之間的距離,青蛙每次跳躍的距離是上一次跳躍的距離-1->+1;也就是在k-1,k,k+1這個(gè)范圍中選擇。
思路:

如何定義dp數(shù)組的含義:dp[i][j]代表的是能否從某個(gè)單元格跳j步到達(dá)i單元格。因此某個(gè)單元格一定是i之前的。那么根據(jù)j的不同,跳到i有很多種方法。

遞推公式:dp[i][distance]=dp[j][distance-1]||dp[j][distance]||dp[j][distance+1]

如何理解這個(gè)遞推公式:首先j是i之前的一個(gè)單元格,從j跳到i,要看distance是否滿足我們能跳的距離。

如果上一個(gè)單元是跳了distance-1到達(dá)的,那么+1后可以得到distance;

如果上一個(gè)單元是跳了distance到達(dá)的,那么不變可以得到distance;

如果上一個(gè)單元是跳了distance+1到達(dá)的,那么-1可以得到distance;

代碼:
class Solution {public boolean canCross(int[] stones) {int length=stones.length;//1.定義dp數(shù)組boolean[][] dp=new boolean[length][length];//dp數(shù)組的含義//初始化dp數(shù)組dp[0][0]=true;for(int i=1;i<length;i++){for(int j=i-1;j>=0;j--){int distance=stones[i]-stones[j];//如果此時(shí)的j是無法跳過來的,那么j--之后,更無法跳過來,所以直接breakif(distance>j+1)break;dp[i][distance]=dp[j][distance-1]||dp[j][distance]||dp[j][distance+1];if(i==length-1&&dp[i][distance])return true;}}return false;}
}

五、等差數(shù)列劃分(滑動(dòng)窗口/dp)

如果一個(gè)數(shù)列?至少有三個(gè)元素?,并且任意兩個(gè)相鄰元素之差相同,則稱該數(shù)列為等差數(shù)列。

給你一個(gè)整數(shù)數(shù)組?nums?,返回?cái)?shù)組?nums?中所有為等差數(shù)組的?子數(shù)組?個(gè)數(shù)。

子數(shù)組?是數(shù)組中的一個(gè)連續(xù)序列。

輸入:nums = [1,2,3,4]
輸出:3
解釋:nums 中有三個(gè)子等差數(shù)組:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。
解法一:滑動(dòng)窗口
思路:

每次在數(shù)組中找一個(gè)最長等差數(shù)列,然后根據(jù)公式計(jì)算一下該等差數(shù)列中含有幾個(gè)長度>=3的等差數(shù)列,如果len=5,長度為3的有3個(gè),長度為4的有2個(gè),長度為5的有1個(gè)。1+2+...+len-2 次數(shù)為:len-1 * len -2 /2

如果加上下一個(gè)元素 無法構(gòu)成等差數(shù)列,那么就結(jié)算一下。然后繼續(xù)重置數(shù)列長度。

代碼:
/**
滑動(dòng)窗口*/
class Solution {public int numberOfArithmeticSlices(int[] nums) {if(nums.length<3)return 0;int right=2;int count=0;int len=2;int preDiff=nums[1]-nums[0];while(right<nums.length){int curDiff=nums[right]-nums[right-1];if(curDiff==preDiff)len++;if(curDiff!=preDiff){count+=(len-1)*(len-2)/2;preDiff=curDiff;len=2;}right++;}count+=(len-1)*(len-2)/2;return count;}
}
解法二:動(dòng)態(tài)規(guī)劃
思路:

dp[i]:代表以nums[i]為結(jié)尾的等差數(shù)列的個(gè)數(shù)。

如果nums[i]==nums[i-1]&&nums[i-1]==nums[i-2] 那么dp[i]+=dp[i-1]+1;

為什么dp[i]+=dp[i-1]+1,因?yàn)樵谠瓉淼幕A(chǔ)上延長到以nums[i]結(jié)尾的這個(gè)數(shù)列的長度是不變的,新加的+1是新組成的一個(gè)等差數(shù)列,由nums[i-2] nums[i-1] nums[i]組成

代碼:
class Solution {public int numberOfArithmeticSlices(int[] nums) {if(nums.length<3)return 0;int[] dp=new int[nums.length];int res=0;for(int i=2;i<nums.length;i++){if(nums[i]-nums[i-1]==nums[i-1]-nums[i-2]){dp[i]=dp[i-1]+1;res+=dp[i];}}return res;}
}

?
http://www.risenshineclean.com/news/8117.html

相關(guān)文章:

  • 網(wǎng)頁界面設(shè)計(jì)的構(gòu)成要素電商seo是什么意思啊
  • 速拓科技是做網(wǎng)站sem網(wǎng)絡(luò)營銷
  • 本地網(wǎng)站建設(shè)百度的人工客服電話
  • 網(wǎng)站做跳轉(zhuǎn)對(duì)排名有影響嗎百度識(shí)別圖片找圖
  • 有哪些網(wǎng)站做汽車周邊服務(wù)360手機(jī)優(yōu)化大師下載
  • 做網(wǎng)站的銷售團(tuán)隊(duì)合肥網(wǎng)絡(luò)推廣服務(wù)
  • 海星wap建站培訓(xùn)計(jì)劃方案
  • 做網(wǎng)站都要學(xué)什么互換鏈接的方法
  • 知乎 網(wǎng)站開發(fā)工具百度關(guān)鍵詞價(jià)格排行榜
  • wordpress自定義二級(jí)菜單的標(biāo)簽網(wǎng)絡(luò)優(yōu)化app
  • 中國最頂尖的平面設(shè)計(jì)公司網(wǎng)站優(yōu)化最為重要的內(nèi)容是
  • 濟(jì)南做網(wǎng)站注冊(cè)一個(gè)域名需要多少錢
  • wordpress外國人留言長春seo按天計(jì)費(fèi)
  • wordpress跳轉(zhuǎn)到登錄頁面代碼aso優(yōu)化貼吧
  • 深圳網(wǎng)站公司制作重慶seo搜索引擎優(yōu)化優(yōu)與略
  • 昆明小程序開發(fā)公司黑帽seo什么意思
  • 網(wǎng)站建設(shè)山東聚搜網(wǎng)絡(luò)一x系統(tǒng)優(yōu)化app最新版
  • 網(wǎng)站線上體系如何網(wǎng)絡(luò)媒體推廣
  • 企業(yè)網(wǎng)站建設(shè)合同百度網(wǎng)站優(yōu)化方案
  • 網(wǎng)站開發(fā)后如何上線濟(jì)南seo公司報(bào)價(jià)
  • 濮陽市網(wǎng)站建設(shè)寧波網(wǎng)絡(luò)營銷怎么做
  • 頁面設(shè)計(jì)公司排名seo有哪些優(yōu)化工具
  • 程序開發(fā)步驟深圳seo公司排名
  • 三方物流網(wǎng)站建設(shè)網(wǎng)站老域名跳轉(zhuǎn)到新域名
  • 做網(wǎng)站用html還是phpseo網(wǎng)站平臺(tái)
  • 騰訊微信網(wǎng)站建設(shè)價(jià)格seo軟件資源
  • 用什么軟件做動(dòng)漫視頻網(wǎng)站seo引擎優(yōu)化公司
  • 用織夢(mèng)做的網(wǎng)站怎樣看品牌運(yùn)營包括哪些內(nèi)容
  • wordpress 打包seo排名賺app靠譜嗎
  • re安裝wordpress短視頻seo軟件