LeetCode第17场双周赛

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();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王跃坤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值