LeetCode: 1108. IP 地址无效化
描述:
给你一个有效的 IPv4 地址 address
,返回这个 IP 地址的无效化版本。
所谓无效化 IP 地址,其实就是用 "[.]"
代替了每个 "."
。
.
就拼接 [.]
class Solution {
public String defangIPaddr(String address) {
StringBuilder res = new StringBuilder();
for(int i = 0; i < address.length(); i++) {
if(address.charAt(i)=='.') {
res.append("[.]");
}else{
res.append(address.charAt(i));
}
}
return res.toString();
}
}
LeetCode: 1431. 拥有最多糖果的孩子
描述:
给你一个数组 candies
和一个整数 extraCandies
,其中 candies[i]
代表第 i
个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies
个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
第二次遍历, 看数组中元素加上 extraCandies
是否大于这个最大值.
如果大于, 就是true
如果小于, 就是false
class Solution {
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
List<Boolean> res = new ArrayList<>();
int max = 0;
for(int candie : candies) {
max = Math.max(candie,max);
}
for(int i = 0; i < candies.length ; i++) {
if(candies[i] + extraCandies >= max) {
res.add(true);
}else{
res.add(false);
}
}
return res;
}
}
LeetCode: 1720. 解码异或后的数组
描述:
未知 整数数组 arr
由 n 个非负整数组成。
经编码后变为长度为 n - 1
的另一个整数数组 encoded
,其中 encoded[i] = arr[i] XOR arr[i + 1]
。例如,arr = [1,0,2,1]
经编码后得到 encoded = [1,2,3]
。
给你编码后的数组 encoded
和原数组 arr
的第一个元素 first(arr[0])
。
请解码返回原数组 arr
。可以证明答案存在并且是唯一的。
first
. 后面的元素依次是 res[i] = res[i-1] ^ encoded[i-1]
class Solution {
public int[] decode(int[] encoded, int first) {
int[] res = new int[encoded.length + 1];
res[0] = first;
for(int i = 0; i < encoded.length; i++) {
res[i+1] = encoded[i] ^ res[i];
}
return res;
}
}
LeetCode: 1863. 找出所有子集的异或总和再求和
描述:
一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。
[2,5,6]
的 异或总和 为 2 XOR 5 XOR 6 = 1
。给你一个数组 nums
,请你求出 nums
中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。
注意:在本题中,元素 相同 的不同子集应 多次 计数。
数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。
class Solution {
private int res = 0;
public int subsetXORSum(int[] nums) {
bfs(nums,0,0);
return res;
}
public void bfs(int[] nums, int start , int tmp) {
res += tmp;
for(int i = start; i < nums.length; i++) {
bfs(nums, i+1, tmp^nums[i]);
}
}
}
LeetCode: 2160. 拆分数位后四位数字的最小和
描述:
给你一个四位 正 整数 num 。请你使用 num 中的 数位 ,将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 ,且 num 中 所有 数位都必须使用。
num = 2932
,你拥有的数位包括:两个 2 ,一个 9 和一个 3 。一些可能的 [new1, new2]
数对为 [22, 93],[23, 92],[223, 9] 和 [2, 329]
。请你返回可以得到的 new1 和 new2 的 最小 和。
a*10 + d
, b*10 + c
, 这就是两个最小和数对.class Solution {
public int minimumSum(int num) {
int[] arr = new int[4];
for(int i = 0; i < 4; i++) {
arr[i] = num%10;
num /= 10;
}
Arrays.sort(arr);
return arr[0]*10+arr[3] + arr[1]*10+arr[2];
}
}
LeetCode: 2181. 合并零之间的节点
描述:
给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0
。
对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0 。
返回修改后链表的头节点 head
。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeNodes(ListNode head) {
ListNode cur = head;
ListNode pre = head;
ListNode node = null;
while(cur != null) {
int tmp = 0;
while(cur != null && cur.val != 0) {
tmp += cur.val;
cur = cur.next;
}
if(tmp != 0) {
node = pre;
pre.val = tmp;
pre.next = cur;
pre = cur;
}
cur = cur.next;
}
node.next = null;
return head;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wangzhi430.blog.csdn.net/article/details/125845011
内容来源于网络,如有侵权,请联系作者删除!