51443 解压缩编码列表
给你一个以行程长度编码压缩的整数列表 nums 。
考虑每相邻两个元素 [a, b] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后有 a 个值为 b 的元素。
请你返回解压后的列表。
示例:
输入:nums = [1,2,3,4]
输出:[2,4,4,4]
提示:
2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100
public static int [] ans(int []nums){
int sum=0;
for(int i=0;i<nums.length;i+=2){
sum+=nums[i];
}
int ans[]=new int[sum];
int p=0;
for(int i=0;i<nums.length;i+=2){
for(int j=0;j<nums[i];j++)
ans[p+j]=nums[i+1];
p+=nums[i];
}
return ans;
}
5144. 矩阵区域和
给你一个 m * n 的矩阵 mat 和一个整数 K ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:
i - K <= r <= i + K, j - K <= c <= j + K
(r, c) 在矩阵内。
示例 1:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], K = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]
示例 2:
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], K = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]
提示:
m == mat.length
n == mat[i].length
1 <= m, n, K <= 100
1 <= mat[i][j] <= 100
public static int [][] ans(int[][] mat, int K){
int answer[][]=new int[mat.length][mat[0].length];
for(int i=0;i<answer.length;i++){
for(int j=0;j<answer[0].length;j++){
for(int x=i-K;x<=i+K;x++){
for(int y=j-K;y<=j+K;y++){
if(x>=0&&y>=0&&x<mat.length&&y<mat[0].length)
answer[i][j]+=mat[x][y];
}
}
}
}
return answer;
}
5145. 祖父节点值为偶数的节点和
给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:
该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。)
如果不存在祖父节点值为偶数的节点,那么返回 0 。
示例:
输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
输出:18
解释:图中红色节点的祖父节点的值为偶数,蓝色节点为这些红色节点的祖父节点。
提示:
树中节点的数目在 1 到 10^4 之间。
每个节点的值在 1 到 100 之间。
public static int ans(TreeNode root){
int sum=0;
HashSet<TreeNode> set=new HashSet<TreeNode>();
HashSet<TreeNode> old,cur;
set.add(root);
if(root.val%2==0)
sum+=find(root);
do{
cur=new HashSet<TreeNode>();
Iterator it = set.iterator();
while(it.hasNext()){
TreeNode key=(TreeNode) it.next();
if(key.left!=null){
cur.add(key.left);
}
if(key.right!=null){
cur.add(key.right);
}
}
old=set;
set=cur;
Iterator itt = set.iterator();
while(itt.hasNext()){
TreeNode key=(TreeNode) itt.next();
if(key.val%2==0){
sum+=find(key);
}
}
}while(set.size()>0);
return sum;
}
public static int find(TreeNode root){
int ans=0;
if(root.left!=null){
if(root.left.left!=null)ans+=root.left.left.val;
if(root.left.right!=null)ans+=root.left.right.val;
}
if(root.right!=null){
if(root.right.left!=null)ans+=root.right.left.val;
if(root.right.right!=null)ans+=root.right.right.val;
}
return ans;
}
5146. 不同的循环子字符串
给你一个字符串 text ,请你返回满足下述条件的 不同 非空子字符串的数目:这些子字符串可以写成某个字符串与其自身的串联。
示例 1:
输入:text = “abcabcabc”
输出:3
解释:3 个子字符串分别为 “abcabc” , “bcabca” 和 “cabcab” 。
示例 2:
输入:text = “leetcodeleetcode”
输出:2
解释:2 个子字符串为 “ee” 和 “leetcodeleetcode” 。
提示:
1 <= text.length <= 2000
text 只包含小写英文字母。
public static int ans2(String text){
int n = text.length();
HashSet<String> set = new HashSet<>();
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
int left = i,right = j;
if (j+j-i>n)break;
if (text.substring(i,j).equals(text.substring(j,j+j-i))){
set.add(text.substring(i,j));
}
}
}
return set.size();
}