第一題
給你一個字串s和數字k 把所有的s字串替換成他的索引+k,索引越界就從左邊繼續走。
java code
--------------------------------------
class Solution {
public String getEncryptedString(String s, int k) {
StringBuilder sb = new StringBuilder();
int n = s.length();
for (int i = 0; i < n; i++) {
sb.append(s.charAt((i + k) % n));
}
return sb.toString();
}
}
--------------------------------------
第二題
n才10,直接用回溯法窮舉二進制字串,然後把符合條件的加入結果集。
java code
--------------------------------------
class Solution {
public List<String> validStrings(int n) {
List<String> res = new ArrayList<>();
dfs(res, new StringBuilder(), n);
return res;
}
void dfs(List<String> res, StringBuilder curr, int n) {
int length = curr.length();
if (length == n) {
if (isBinaryString(curr)) {
res.add(curr.toString());
}
return;
}
curr.append('0');
dfs(res, curr, n);
curr.deleteCharAt(length);
curr.append('1');
dfs(res, curr, n);
curr.deleteCharAt(length);
}
boolean isBinaryString(StringBuilder curr) {
for (int i = 1; i < curr.length(); i++) {
if (curr.charAt(i) != '1' && curr.charAt(i - 1) != '1') {
return false;
}
}
return true;
}
}
--------------------------------------
第三題
簡單dp,因為起始點在左上所以一列一列的掃就好。
java code
--------------------------------------
class Solution {
public int numberOfSubmatrices(char[][] grid) {
int n = grid.length;
int m = grid[0].length;;
int[][] dp = new int[m][2];
int res = 0;
for (int i = 0; i < n; i++) {
int y = 0;
int x = 0;
for (int j = 0; j < m; j++) {
y += grid[i][j] == 'Y' ? 1 : 0;
x += grid[i][j] == 'X' ? 1 : 0;
if (dp[j][0] + x > 0 && dp[j][0] + x == dp[j][1] + y) {
res++;
}
dp[j][0] += x;
dp[j][1] += y;
}
}
return res;
}
}
--------------------------------------
第四題
我看了一下感覺是dp 然後看看測資大小我選擇死亡
遇到困難睡大覺
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.100.73.13 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1720322247.A.015.html