Java每日一练(20230518) 移除元素、跳跃游戏II、复原IP地址

简介: Java每日一练(20230518) 移除元素、跳跃游戏II、复原IP地址

1. 移除链表元素


给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点


示例 1:

77a1c3b8a1c4066a5773b6eb8738e857.jpeg


输入:head = [1,2,6,3,4,5,6], val = 6

输出:[1,2,3,4,5]


示例 2:

输入:head = [], val = 1

输出:[]


示例 3:

输入:head = [7,7,7,7], val = 7

输出:[]


提示:

   列表中的节点数目在范围 [0, 10^4] 内

   1 <= Node.val <= 50

   0 <= val <= 50


出处:

https://edu.csdn.net/practice/28091689

代码:

import java.util.*;
class Solution {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
        }
    }
    public static ListNode removeElements(ListNode head, int val) {
        ListNode top = new ListNode(0);
        top.next = head;
        ListNode pre = top;
        ListNode temp = head;
        while (temp != null) {
            if (temp.val == val)
                pre.next = temp.next;
            else
                pre = temp;
            temp = temp.next;
        }
        return top.next;
    }
    public static ListNode createLinkedList(int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;
        }
        ListNode head = new ListNode(nums[0]);
        ListNode cur = head;
        for (int i = 1; i < nums.length; i++) {
            cur.next = new ListNode(nums[i]);
            cur = cur.next;
        }
        return head;
    }
    public static void printLinkedList(ListNode head) {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + "->");
            cur = cur.next;
        }
        System.out.println("null");
    }
    public static void main(String[] args) {
        int[] nums = {1,2,6,3,4,5,6};
        ListNode head = createLinkedList(nums);
        printLinkedList(head);
        head = removeElements(head, 6);
        printLinkedList(head);
        int[] nums2 = {};
        head = createLinkedList(nums2);
        printLinkedList(head);
        head = removeElements(head, 1);
        printLinkedList(head);
        int[] nums3 = {7,7,7,7};
        head = createLinkedList(nums3);
        printLinkedList(head);
        head = removeElements(head, 7);
        printLinkedList(head);
    }
}

输出:

1->2->6->3->4->5->6->null

1->2->3->4->5->null

null

null

7->7->7->7->null

null




2. 跳跃游戏 II


给定一个非负整数数组,你最初位于数组的第一个位置。


数组中的每个元素代表你在该位置可以跳跃的最大长度。


你的目标是使用最少的跳跃次数到达数组的最后一个位置。


示例:

输入: [2,3,1,1,4]

输出: 2

解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。


说明:

假设你总是可以到达数组的最后一个位置。


出处:

https://edu.csdn.net/practice/28091690


代码:

import java.util.*;
class jump {
    public static int jump(int[] nums) {
        int end = 0;
        int steps = 0;
        int maxPosition = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            maxPosition = Math.max(maxPosition, i + nums[i]);
            if (i == end) {
                end = maxPosition;
                steps++;
            }
        }
        return steps;
    }
    public static void main(String[] args) {
        int[] nums = {2,3,1,1,4};
        System.out.println(jump(nums));
    }
}

输出:

2


3. 复原 IP 地址


给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。


有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。


例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。


示例 1:

输入:s = "25525511135"

输出:["255.255.11.135","255.255.111.35"]


示例 2:

输入:s = "0000"

输出:["0.0.0.0"]


示例 3:

输入:s = "1111"

输出:["1.1.1.1"]


示例 4:

输入:s = "010010"

输出:["0.10.0.10","0.100.1.0"]


示例 5:

输入:s = "101023"

输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]


提示:

   0 <= s.length <= 3000

   s 仅由数字组成


出处:

https://edu.csdn.net/practice/28091691

代码:

import java.util.*;
class restoreIpAddresses {
    private static List<String> res = new ArrayList<>();
    public static List<String> restoreIpAddresses(String s) {
        if (s.length() < 4)
            return res;
        backtrack(s, 0, new StringBuilder(), 0);
        return res;
    }
    private static void backtrack(String s, int start, StringBuilder sb, int pointNumOfSb) {
        if (pointNumOfSb > 4)
            return;
        if (start == s.length() && pointNumOfSb == 4) {
            res.add(sb.toString().substring(1));
            return;
        }
        for (int i = start; i < s.length() && i - start < 3; i++) {
            String x = s.substring(start, i + 1);
            if (x.charAt(0) == '0' && x.length() > 1)
                return;
            if (Integer.parseInt(x) <= 255) {
                sb.append("." + x);
                backtrack(s, i + 1, sb, pointNumOfSb + 1);
                sb.delete(sb.lastIndexOf("."), sb.length());
            }
        }
    }
    public static void main(String[] args) {
        String s = "25525511135";
        System.out.println(restoreIpAddresses(s));
        s = "0000";
        res.clear();
        System.out.println(restoreIpAddresses(s));
        s = "1111";
        res.clear();
        System.out.println(restoreIpAddresses(s));
        s = "010010";
        res.clear();
        System.out.println(restoreIpAddresses(s));
        s = "101023";
        res.clear();
        System.out.println(restoreIpAddresses(s));
    }
}



输出:

[255.255.11.135, 255.255.111.35]

[0.0.0.0]

[1.1.1.1]

[0.10.0.10, 0.100.1.0]

[1.0.10.23, 1.0.102.3, 10.1.0.23, 10.10.2.3, 101.0.2.3]


目录
打赏
0
0
0
0
74
分享
相关文章
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
172 25
Java实现利用GeoLite2-City.mmdb根据IP定位城市的方法
在城市,国家,地区等地理位置数据获取之后,你可以依指定的业务需求,来进行进一步的数据处理。例如,你可以设计一个应用,根据用户的 IP 地址来个性化地展示内容,或者用于分析网络请求的来源等。
337 20
|
6月前
|
Java实现贪吃蛇游戏
本文介绍了如何使用Java实现一个简单的贪吃蛇游戏。
232 4
|
6月前
|
Java游戏开发基础:从零开始制作一个简单的2D游戏
本文介绍了使用Java开发一个简单的2D避障游戏的基础流程。
288 10
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。
328 0
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
280 1
java制作游戏,如何使用libgdx,入门级别教学
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
115 1
|
12月前
|
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
132 4
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
91 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等