力扣题-10.3
力扣题1:661. 图片平滑器
解题思想:遍历数组即可
class Solution(object):
def imageSmoother(self, img):
"""
:type img: List[List[int]]
:rtype: List[List[int]]
"""
m = len(img)
n = len(img[0])
result = [[0] * n for _ in range(m)]
for i in range(m):
for j in range(n):
num = 0
temp = 0
if i-1>=0 and j-1>=0:
temp=temp+img[i-1][j-1]
num = num+1
if i-1>=0 and j>=0:
temp=temp+img[i-1][j]
num = num+1
if i-1>=0 and j+1<=n-1:
temp=temp+img[i-1][j+1]
num = num+1
if i>=0 and j-1>=0:
temp=temp+img[i][j-1]
num = num+1
if i>=0 and j>=0:
temp=temp+img[i][j]
num = num+1
if i>=0 and j+1<=n-1:
temp=temp+img[i][j+1]
num = num+1
if i+1<=m-1 and j-1>=0:
temp=temp+img[i+1][j-1]
num = num+1
if i+1<=m-1 and j>=0:
temp=temp+img[i+1][j]
num = num+1
if i+1<=m-1 and j+1<=n-1:
temp=temp+img[i+1][j+1]
num = num+1
temp = int(temp/num)
result[i][j]=temp
return result
class Solution {
public:
vector<vector<int>> imageSmoother(vector<vector<int>>& img) {
int m = img.size();
int n = img[0].size();
std::vector<std::vector<int>> result(m, std::vector<int>(n, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
int num = 0;
int temp = 0;
if (i - 1 >= 0 && j - 1 >= 0) {
temp += img[i - 1][j - 1];
num++;
}
if (i - 1 >= 0 && j >= 0) {
temp += img[i - 1][j];
num++;
}
if (i - 1 >= 0 && j + 1 <= n - 1) {
temp += img[i - 1][j + 1];
num++;
}
if (i >= 0 && j - 1 >= 0) {
temp += img[i][j - 1];
num++;
}
if (i >= 0 && j >= 0) {
temp += img[i][j];
num++;
}
if (i >= 0 && j + 1 <= n - 1) {
temp += img[i][j + 1];
num++;
}
if (i + 1 <= m - 1 && j - 1 >= 0) {
temp += img[i + 1][j - 1];
num++;
}
if (i + 1 <= m - 1 && j >= 0) {
temp += img[i + 1][j];
num++;
}
if (i + 1 <= m - 1 && j + 1 <= n - 1) {
temp += img[i + 1][j + 1];
num++;
}
temp = temp / num;
result[i][j] = temp;
}
}
return result;
}
};
力扣题1:598. 范围求和 II
解题思想:只要知道最小的矩形范围就可以了
class Solution(object):
def maxCount(self, m, n, ops):
"""
:type m: int
:type n: int
:type ops: List[List[int]]
:rtype: int
"""
min_a=m
min_b=n
for i in ops:
if i[0]<min_a:
min_a = i[0]
if i[1]<min_b:
min_b = i[1]
return min_a*min_b
class Solution {
public:
int maxCount(int m, int n, vector<vector<int>>& ops) {
int min_a = m,min_b = n;
for (const auto& op : ops) {
if (op[0] < min_a) {
min_a = op[0];
}
if (op[1] < min_b) {
min_b = op[1];
}
}
return min_a*min_b;
}
};
力扣题1:419. 甲板上的战舰
解题思想:遍历数组即可,把遍历过的用.重新填写
class Solution(object):
def countBattleships(self, board):
"""
:type board: List[List[str]]
:rtype: int
"""
m = len(board)
n = len(board[0])
count = 0
for i in range(m):
for j in range(n):
if board[i][j]=='X':
for k in range(i+1,m):
if board[k][j]=='X':
board[k][j]='.'
else:
break
for l in range(j+1,n):
if board[i][l]=='X':
board[i][l]='.'
else:
break
board[i][j]='.'
count =count+1
return count
class Solution {
public:
int countBattleships(vector<vector<char>>& board) {
int m = board.size();
int n = board[0].size();
int count = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 'X') {
for (int k = i + 1; k < m; k++) {
if (board[k][j] == 'X') {
board[k][j] = '.';
} else {
break;
}
}
for (int l = j + 1; l < n; l++) {
if (board[i][l] == 'X') {
board[i][l] = '.';
} else {
break;
}
}
board[i][j] = '.';
count++;
}
}
}
return count;
}
};