|
73 | 73 | <li><code>s</code> 由 <code>'L'</code>、<code>'R'</code>、<code>'U'</code> 和 <code>'D'</code> 组成</li>
|
74 | 74 | </ul>
|
75 | 75 |
|
76 |
| - |
77 | 76 | ## 解法
|
78 | 77 |
|
79 | 78 | <!-- 这里可写通用的实现逻辑 -->
|
80 | 79 |
|
| 80 | +直接模拟。 |
| 81 | + |
81 | 82 | <!-- tabs:start -->
|
82 | 83 |
|
83 | 84 | ### **Python3**
|
84 | 85 |
|
85 | 86 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
86 | 87 |
|
87 | 88 | ```python
|
88 |
| - |
| 89 | +class Solution: |
| 90 | + def executeInstructions(self, n: int, startPos: List[int], s: str) -> List[int]: |
| 91 | + ans = [] |
| 92 | + m = len(s) |
| 93 | + mp = { |
| 94 | + "L": [0, -1], |
| 95 | + "R": [0, 1], |
| 96 | + "U": [-1, 0], |
| 97 | + "D": [1, 0] |
| 98 | + } |
| 99 | + for i in range(m): |
| 100 | + x, y = startPos |
| 101 | + t = 0 |
| 102 | + for j in range(i, m): |
| 103 | + a, b = mp[s[j]] |
| 104 | + if 0 <= x + a < n and 0 <= y + b < n: |
| 105 | + x, y, t = x + a, y + b, t + 1 |
| 106 | + else: |
| 107 | + break |
| 108 | + ans.append(t) |
| 109 | + return ans |
89 | 110 | ```
|
90 | 111 |
|
91 | 112 | ### **Java**
|
92 | 113 |
|
93 | 114 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
94 | 115 |
|
95 | 116 | ```java
|
| 117 | +class Solution { |
| 118 | + public int[] executeInstructions(int n, int[] startPos, String s) { |
| 119 | + int m = s.length(); |
| 120 | + int[] ans = new int[m]; |
| 121 | + Map<Character, int[]> mp = new HashMap<>(4); |
| 122 | + mp.put('L', new int[]{0, -1}); |
| 123 | + mp.put('R', new int[]{0, 1}); |
| 124 | + mp.put('U', new int[]{-1, 0}); |
| 125 | + mp.put('D', new int[]{1, 0}); |
| 126 | + for (int i = 0; i < m; ++i) { |
| 127 | + int x = startPos[0], y = startPos[1]; |
| 128 | + int t = 0; |
| 129 | + for (int j = i; j < m; ++j) { |
| 130 | + char c = s.charAt(j); |
| 131 | + int a = mp.get(c)[0], b = mp.get(c)[1]; |
| 132 | + if (0 <= x + a && x + a < n && 0 <= y + b && y + b < n) { |
| 133 | + x += a; |
| 134 | + y += b; |
| 135 | + ++t; |
| 136 | + } else { |
| 137 | + break; |
| 138 | + } |
| 139 | + } |
| 140 | + ans[i] = t; |
| 141 | + } |
| 142 | + return ans; |
| 143 | + } |
| 144 | +} |
| 145 | +``` |
| 146 | + |
| 147 | +### **C++** |
| 148 | + |
| 149 | +```cpp |
| 150 | +class Solution { |
| 151 | +public: |
| 152 | + vector<int> executeInstructions(int n, vector<int>& startPos, string s) { |
| 153 | + int m = s.size(); |
| 154 | + vector<int> ans(m); |
| 155 | + unordered_map<char, vector<int>> mp; |
| 156 | + mp['L'] = {0, -1}; |
| 157 | + mp['R'] = {0, 1}; |
| 158 | + mp['U'] = {-1, 0}; |
| 159 | + mp['D'] = {1, 0}; |
| 160 | + for (int i = 0; i < m; ++i) |
| 161 | + { |
| 162 | + int x = startPos[0], y = startPos[1]; |
| 163 | + int t = 0; |
| 164 | + for (int j = i; j < m; ++j) |
| 165 | + { |
| 166 | + int a = mp[s[j]][0], b = mp[s[j]][1]; |
| 167 | + if (0 <= x + a && x + a < n && 0 <= y + b && y + b < n) |
| 168 | + { |
| 169 | + x += a; |
| 170 | + y += b; |
| 171 | + ++t; |
| 172 | + } |
| 173 | + else break; |
| 174 | + } |
| 175 | + ans[i] = t; |
| 176 | + } |
| 177 | + return ans; |
| 178 | + } |
| 179 | +}; |
| 180 | +``` |
96 | 181 |
|
| 182 | +### **Go** |
| 183 | +
|
| 184 | +```go |
| 185 | +func executeInstructions(n int, startPos []int, s string) []int { |
| 186 | + m := len(s) |
| 187 | + mp := make(map[byte][]int) |
| 188 | + mp['L'] = []int{0, -1} |
| 189 | + mp['R'] = []int{0, 1} |
| 190 | + mp['U'] = []int{-1, 0} |
| 191 | + mp['D'] = []int{1, 0} |
| 192 | + ans := make([]int, m) |
| 193 | + for i := 0; i < m; i++ { |
| 194 | + x, y := startPos[0], startPos[1] |
| 195 | + t := 0 |
| 196 | + for j := i; j < m; j++ { |
| 197 | + a, b := mp[s[j]][0], mp[s[j]][1] |
| 198 | + if 0 <= x+a && x+a < n && 0 <= y+b && y+b < n { |
| 199 | + x += a |
| 200 | + y += b |
| 201 | + t++ |
| 202 | + } else { |
| 203 | + break |
| 204 | + } |
| 205 | + } |
| 206 | + ans[i] = t |
| 207 | + } |
| 208 | + return ans |
| 209 | +} |
97 | 210 | ```
|
98 | 211 |
|
99 | 212 | ### **TypeScript**
|
|
0 commit comments