输入:key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv" 输出:"this is a secret" 解释:对照表如上图所示。 提取 "the quick brown fox jumps over the lazy dog" 中每个字母的首次出现可以得到替换表。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) { int dx[4] = {1,0,-1,0},dy[4] = {0,1,0,-1}; vector<vector<int>> res(m,vector<int>(n,-1)); int x = 0,y = 0,model = 0;
while(head){ res[y][x] = head->val; int a = x + dx[model],b = y + dy[model]; if(a<0 || a>=n || b>=m || b <0 ||res[b][a] != -1) model = (model+1)%4; x += dx[model]; y += dy[model]; head = head->next; } return res; } };
结果
1 2 3 4 5 6 7 8 9 10 11 12
执行用时: 196 ms , 在所有 C++ 提交中击败了 74.75% 的用户 内存消耗: 125 MB , 在所有 C++ 提交中击败了 25.78% 的用户 通过测试用例: 49 / 49
class Solution { public: vector<vector<int>> g; int visited[1010][1010]; int n,m; const int MOD = 1e9 + 7;
int dp(int x,int y){ int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1}; if(visited[x][y] != -1) return visited[x][y];
visited[x][y] = 1; for(int i = 0;i < 4;i++){ int a = x + dx[i],b = y + dy[i]; if(a >= 0 && a< n && b >= 0 && b < m && g[a][b] > g[x][y]) visited[x][y] = (visited[x][y] + dp(a,b)) % MOD; } return visited[x][y]; }
int countPaths(vector<vector<int>>& grid) { n = grid.size(); m = grid[0].size(); g = grid; for(int i = 0;i<n;i++) for(int j = 0;j<m;j++){ visited[i][j] = -1; } int res = 0;