精華區beta Marginalman 關於我們 聯絡資訊
第一題 給你一個字串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