|
59 | 59 |
|
60 | 60 | <!-- 这里可写通用的实现逻辑 -->
|
61 | 61 |
|
| 62 | +**方法一:贪心** |
| 63 | + |
| 64 | +设机器人当前位置为 $(i, j)$,目标位置为 $(x, y)$。 |
| 65 | + |
| 66 | +- 如果 $i \lt x$,则机器人往下移动,代价为 $rowCosts[i + 1] + rowCosts[i + 2] + \cdots + rowCosts[x]$。 |
| 67 | +- 如果 $i \gt x$,则机器人往上移动,代价为 $rowCosts[x] + rowCosts[x + 1] + \cdots + rowCosts[i - 1]$。 |
| 68 | +- 如果 $j \lt y$,则机器人往右移动,代价为 $colCosts[j + 1] + colCosts[j + 2] + \cdots + colCosts[y]$。 |
| 69 | +- 如果 $j \gt y$,则机器人往左移动,代价为 $colCosts[y] + colCosts[y + 1] + \cdots + colCosts[j - 1]$。 |
| 70 | + |
| 71 | +时间复杂度 $O(m + n)$,空间复杂度 $O(1)$。其中 $m$ 和 $n$ 分别为 $rowCosts$ 和 $colCosts$ 的长度。 |
| 72 | + |
62 | 73 | <!-- tabs:start -->
|
63 | 74 |
|
64 | 75 | ### **Python3**
|
65 | 76 |
|
66 | 77 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
67 | 78 |
|
68 | 79 | ```python
|
69 |
| - |
| 80 | +class Solution: |
| 81 | + def minCost(self, startPos: List[int], homePos: List[int], rowCosts: List[int], colCosts: List[int]) -> int: |
| 82 | + i, j = startPos |
| 83 | + x, y = homePos |
| 84 | + ans = 0 |
| 85 | + if i < x: |
| 86 | + ans += sum(rowCosts[i + 1: x + 1]) |
| 87 | + else: |
| 88 | + ans += sum(rowCosts[x: i]) |
| 89 | + if j < y: |
| 90 | + ans += sum(colCosts[j + 1: y + 1]) |
| 91 | + else: |
| 92 | + ans += sum(colCosts[y: j]) |
| 93 | + return ans |
70 | 94 | ```
|
71 | 95 |
|
72 | 96 | ### **Java**
|
73 | 97 |
|
74 | 98 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
75 | 99 |
|
76 | 100 | ```java
|
| 101 | +class Solution { |
| 102 | + public int minCost(int[] startPos, int[] homePos, int[] rowCosts, int[] colCosts) { |
| 103 | + int i = startPos[0], j = startPos[1]; |
| 104 | + int x = homePos[0], y = homePos[1]; |
| 105 | + int ans = 0; |
| 106 | + if (i < x) { |
| 107 | + for (int k = i + 1; k <= x; ++k) { |
| 108 | + ans += rowCosts[k]; |
| 109 | + } |
| 110 | + } else { |
| 111 | + for (int k = x; k < i; ++k) { |
| 112 | + ans += rowCosts[k]; |
| 113 | + } |
| 114 | + } |
| 115 | + if (j < y) { |
| 116 | + for (int k = j + 1; k <= y; ++k) { |
| 117 | + ans += colCosts[k]; |
| 118 | + } |
| 119 | + } else { |
| 120 | + for (int k = y; k < j; ++k) { |
| 121 | + ans += colCosts[k]; |
| 122 | + } |
| 123 | + } |
| 124 | + return ans; |
| 125 | + } |
| 126 | +} |
| 127 | +``` |
| 128 | + |
| 129 | +### **C++** |
| 130 | + |
| 131 | +```cpp |
| 132 | +class Solution { |
| 133 | +public: |
| 134 | + int minCost(vector<int>& startPos, vector<int>& homePos, vector<int>& rowCosts, vector<int>& colCosts) { |
| 135 | + int i = startPos[0], j = startPos[1]; |
| 136 | + int x = homePos[0], y = homePos[1]; |
| 137 | + int ans = 0; |
| 138 | + if (i < x) { |
| 139 | + ans += accumulate(rowCosts.begin() + i + 1, rowCosts.begin() + x + 1, 0); |
| 140 | + } else { |
| 141 | + ans += accumulate(rowCosts.begin() + x, rowCosts.begin() + i, 0); |
| 142 | + } |
| 143 | + if (j < y) { |
| 144 | + ans += accumulate(colCosts.begin() + j + 1, colCosts.begin() + y + 1, 0); |
| 145 | + } else { |
| 146 | + ans += accumulate(colCosts.begin() + y, colCosts.begin() + j, 0); |
| 147 | + } |
| 148 | + return ans; |
| 149 | + } |
| 150 | +}; |
| 151 | +``` |
77 | 152 |
|
| 153 | +### **Go** |
| 154 | +
|
| 155 | +```go |
| 156 | +func minCost(startPos []int, homePos []int, rowCosts []int, colCosts []int) (ans int) { |
| 157 | + i, j := startPos[0], startPos[1] |
| 158 | + x, y := homePos[0], homePos[1] |
| 159 | + if i < x { |
| 160 | + ans += sum(rowCosts, i+1, x+1) |
| 161 | + } else { |
| 162 | + ans += sum(rowCosts, x, i) |
| 163 | + } |
| 164 | + if j < y { |
| 165 | + ans += sum(colCosts, j+1, y+1) |
| 166 | + } else { |
| 167 | + ans += sum(colCosts, y, j) |
| 168 | + } |
| 169 | + return |
| 170 | +} |
| 171 | +
|
| 172 | +func sum(nums []int, i, j int) (s int) { |
| 173 | + for k := i; k < j; k++ { |
| 174 | + s += nums[k] |
| 175 | + } |
| 176 | + return |
| 177 | +} |
78 | 178 | ```
|
79 | 179 |
|
80 | 180 | ### **...**
|
|
0 commit comments