泰波那契序列 tn 定義如下:
t 0=
0,t1
=1,t
2=1,
且在
n>=0
的條件下
tn+3
=tn+
tn+1
+tn+
2t_ = 0, t_ = 1, t_ = 1, 且在 n >= 0 的條件下 t_ = t + t_ + t_
t0=0,
t1=
1,t2
=1,
且在n>=0
的條件下
tn+3
=tn
+tn
+1+
tn+2
給你整數n
,請返回第 n 個泰波那契數 tnt_
tn的值。
示例 1:
輸入:n = 4
輸出:4
解釋:t_3 = 0 + 1 + 1 = 2
t_4 = 1 + 1 + 2 = 4
示例 2:
輸入:n = 25
輸出:1389537
與求解斐波那契數列的第n項的思路相同,採用遞推的方式進行求解。
需要注意的是,答案是乙個32位整數,因此需要用unsigned int
儲存答案,如果用int
儲存,可能會發生越界。
class
solution
return ans;}}
;
我們從一塊字母板上的位置(0, 0)
出發,該座標對應的字元為board[0][0]
。
在本題裡,字母板為board = ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"]
.
我們可以按下面的指令規則行動:
返回指令序列,用最小的行動次數讓答案和目標target
相同。你可以返回任何達成目標的路徑。
示例 1:
輸入:target = "leet"
輸出:"ddr!uurrr!!ddd!"
示例 2:
輸入:target = "code"
輸出:"rr!ddrr!uul!r!"
由於僅能上下左右移動,實際上給定單詞的指令序列長度是一定的。而且題目中並未規定輸出指令的順序,因此只要明確兩個字母間的橫向和縱向距離差即可輸出相應的指令。
由於字母板最後一行僅有乙個字母z
,因此若想移動到z
,僅能從第5行的u
向下移動到z
。若想從z
移動到其他字母,只能先從z
開始向上移動,隨後再進行左右移動。因此,若目的地是z
,則先執行左右移動的指令,再執行上下移動的指令;若起點是z
,則先執行左右移動的指令,再執行上下移動的指令。
本題中無需構建出字母板,只需要計算各字母間座標,求出目標點和起始點之間的座標的相對大小即可:
int xi =
(x -
'a')/5
;int xj =
(x -
'a')%5
;int curi =
(cur -
'a')/5
;int curj =
(cur -
'a')%5
;deltai = xi - curi;
deltaj = xj - curj;
若偏移量大於0,則執行下/右移動,若偏移量小於0,則執行上/左移動。
char row[2]
=;char col[2]
=;class
solution
else
ans +
='!'
; cur = x;
}return ans;
}void
calculate
(char x,
char cur,
int& deltai,
int&deltaj)
};
給你乙個由若干0
和1
組成的二維網格grid
,請你找出邊界全部由1
組成的最大正方形子網格,並返回該子網格中的元素數量。如果不存在,則返回0
。
示例 1:
輸入:grid = [[1,1,1],[1,0,1],[1,1,1]]
輸出:9
示例 2:
輸入:grid = [[1,1,0,0]]
輸出:1
本題可利用滑動視窗法進行檢測。具體過程結合參考**分析。
class
solution
}int len=
min(m,n)
;for
(i=1
;i<=n;i++)}
}return ans*ans;}}
;
分析:
s1和s2分別是每行元素的累積和與每列元素的累積和。若當前行全為1,則累積和的最後乙個元素應等於列的數目。
隨後進行滑窗檢測。滑窗左上角的起始點為(i,j),滑窗的邊長為k。根據起點和k可以得出行的起點和終點為[l1,r1],列的起點和終點為[l2,r2]。隨後進行5項檢測:
當前滑窗邊長小於已經獲得的邊長,則無需進行此次檢驗
當前最上邊的累積和不等於滑窗邊長k,則跳過
當前最下邊的累積和不等於滑窗邊長k,則跳過
當前最左邊的累積和不等於滑窗邊長k,則跳過
當前最右邊的累積和不等於滑窗邊長k,則跳過
如果當前獲得的結果等於網格的長寬中最小值,說明已經獲得最大網格,則可直接退出檢測。
亞歷克斯和李繼續他們的石子遊戲。許多堆石子排成一行,每堆都有正整數顆石子piles[i]
。遊戲以誰手中的石子最多來決出勝負。
亞歷克斯和李輪流進行,亞歷克斯先開始。最初,m = 1
。
在每個玩家的回合中,該玩家可以拿走剩下的前x
堆的所有石子,其中1 <= x <= 2m
。然後,令m = max(m, x)
。
遊戲一直持續到所有石子都被拿走。
假設亞歷克斯和李都發揮出最佳水平,返回亞歷克斯可以得到的最大數量的石頭。
示例:
輸入:piles = [2,7,9,4,4]
輸出:10
解釋:如果亞歷克斯在開始時拿走一堆石子,李拿走兩堆,接著亞歷克斯也拿走兩堆。在這種情況下,亞歷克斯可以拿到 2 + 4 + 4 = 10 顆石子。
如果亞歷克斯在開始時拿走兩堆石子,那麼李就可以拿走剩下全部三堆石子。在這種情況下,亞歷克斯可以拿到 2 + 7 = 9 顆石子。
所以我們返回更大的 10。
(暫時不懂)
第一種方法(不理解其動態規劃)
class
solution
}return dp[1]
[1];
}};
第二種方法class
solution
}return dp[0]
[0];
}};
leetcode 第132場周賽
愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2輸出 true解釋 愛...
leetcode周賽 第176場
題目描述 給你乙個 m n 的矩陣 grid,矩陣中的元素無論是按行還是按列,都以非遞增順序排列。請你統計並返回 grid 中 負數 的數目。示例 1 輸入 grid 4,3,2,1 3,2,1,1 1,1,1,2 1,1,2,3 輸出 8 解釋 矩陣中共有 8 個負數。示例 2 輸入 grid 3...
leetcode 第 180 場周賽
大佬都是3 5分鐘一題,而我10分鐘一題,最後一題還不會。qaq 5356.矩陣中的幸運數 給你乙個m n的矩陣,矩陣中的數字各不相同。請你按任意順序返回矩陣中的所有幸運數。幸運數是指矩陣中滿足同時下列兩個條件的元素 class solution object def luckynumbers se...