每日程式設計 (三十)

2021-09-12 11:47:29 字數 2681 閱讀 1381

題目描述:

給定 pushed 和 popped 兩個序列,只有當它們可能是在最初空棧上進行的推入 push 和彈出 pop 操作序列的結果時,返回 true;否則,返回 false 。

示例 1:

輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

輸出:true

解釋:我們可以按以下順序執行:

push(1), push(2), push(3), push(4), pop() -> 4,

push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

輸入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]

輸出:false

解釋:1 不能在 2 之前彈出。

分析:就是模擬棧的進棧出棧,大概思路就是,初始化乙個切片res,存放進棧元素,初始化乙個cnt,標識正確出棧元素的數量,根據不同的情況進行操作,首先如果res不是空的,res的最後乙個元素等於出棧的第乙個元素,那就將res最後乙個元素去掉,cnt++;如果popped[j]==pushed[i],直接不需要進棧,cnt++;最後就是需要進棧的操作了。說的比較不清楚,沒關係看**就好了

**:

func validatestacksequences(pushed int, popped int) bool 

cnt:=0

i:=0

j:=0

for j題目描述:

給定乙個沒有重複數字的序列,返回其所有可能的全排列。

示例:輸入: [1,2,3]

輸出:[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]分析:一開始想的用回溯法,不知道為什麼go語言一直出錯,後來看了人家的**,用了遞迴,大致的意思就是每次選出乙個元素作為開頭的元素,然後最後只剩乙個了,再加上上次選中的,再進行交換,一級一級遞推

**:func permute(nums int) int

if n==1

for i:=0;i1

11

21

1211

111221

1 被讀作 「one 1」 (「乙個一」) , 即 11。

11 被讀作 「two 1s」 (「兩個一」), 即 21。

21 被讀作 「one 2」, 「one 1」 (「乙個二」 , 「乙個一」) , 即 1211。

給定乙個正整數 n(1 ≤ n ≤ 30),輸出報數序列的第 n 項。

注意:整數順序將表示為乙個字串。

示例 1:

輸入: 1

輸出: 「1」

示例 2:

輸入: 4

輸出: 「1211」、

分析:還是遞迴,確定的就是1返回的是」1「,然後通過遍歷,記錄重複次數,遇到不一樣的就進行一次拼接,strconv.itoa(repeatcount),int轉換成字串

**:

func countbefore(s string) string  else 

} return resstr

}func countandsay(n int) string

return countbefore(countandsay(n - 1))

}

題目描述:

在完成原地修改輸入陣列後,返回陣列的新長度。

高階:你能否僅使用o(1) 空間解決問題?

示例 1:

輸入:[「a」,「a」,「b」,「b」,「c」,「c」,「c」]

輸出:返回6,輸入陣列的前6個字元應該是:[「a」,「2」,「b」,「2」,「c」,「3」]

說明:"aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。

示例 2:

輸入:[「a」]

輸出:返回1,輸入陣列的前1個字元應該是:[「a」]

說明:沒有任何字串被替代。

示例 3:

輸入:[「a」,「b」,「b」,「b」,「b」,「b」,「b」,「b」,「b」,「b」,「b」,「b」,「b」]

輸出:返回4,輸入陣列的前4個字元應該是:[「a」,「b」,「1」,「2」]。

說明:由於字元"a"不重複,所以不會被壓縮。"bbbbbbbbbbbb"被「b12」替代。

注意每個數字在陣列中都有它自己的位置。

注意:所有字元都有乙個ascii值在[35, 126]區間內。

1 <= len(chars) <= 1000。

分析:這道題和上一道題有相似的地方,就是要記錄重複字數,需要在原來的切片上進行改動,不能申請額外空間,不多說了,看**吧,需要注意的就是int轉換成byte,我是先轉換成string,再轉換成byte

**:

func compress(chars byte) int 

cur:=0

for i:=1;i1

}chars=chars[:cur+1]

return cur+1

}

每日一練(三十)

分析下列輸出 char a cout strlen a endl 返回的結果不可預料,因為a初始化的時候,結尾沒有主動加上 0 結束符。而標準庫字串處理函式的時候是以結束符 0為結束的。同理,如下的程式輸出 char a printf s a 輸出的就是 ab了,因為字串處理以 0 為終止。本質上講...

每日程式設計 31

題目描述 有n個房間,現在i號房間裡的人需要被重新分配,分配的規則是這樣的 先讓i號房間裡的人全都出來,接下來按照 i 1,i 2,i 3,的順序依此往這些房間裡放乙個人,n號房間的的下乙個房間是1號房間,直到所有的人都被重新分配。現在告訴你分配完後每個房間的人數以及最後乙個人被分配的房間號x,你需...

每日程式設計(36)

題目描述 矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 ...