1. 有效数字
有效数字(按顺序)可以分成以下几个部分:
- 一个 小数 或者 整数
- (可选)一个
'e'
或'E'
,后面跟着一个 整数
小数(按顺序)可以分成以下几个部分:
(可选)一个符号字符('+' 或 '-')
下述格式之一:
至少一位数字,后面跟着一个点 '.'
至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字
一个点 '.' ,后面跟着至少一位数字
整数(按顺序)可以分成以下几个部分:
(可选)一个符号字符('+' 或 '-')
至少一位数字
部分有效数字列举如下:
["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"]
部分无效数字列举如下:
["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"]
给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。
示例 1:
输入:s = "0"
输出:true
示例 2:
输入:s = "e"
输出:false
示例 3:
输入:s = "."
输出:false
示例 4:
输入:s = ".1"
输出:true
提示:
1 <= s.length <= 20
s 仅含英文字母(大写和小写),数字(0-9),加号 '+' ,减号 '-' ,或者点 '.' 。
以下程序实现了这一功能,请你填补空白处内容:
```Java
class Solution { char[] chars; boolean point = false; boolean exponent = false; public boolean isNumber(String s) { s = s.trim(); int length = s.length(); if (length == 0) { return false; } chars = s.toCharArray(); String[] ss = s.split("e"); if (ss.length == 0) { return false; } if (ss[0].length() == 0) return false; if (ss[0].length() < length) exponent = true; if (ss[0].length() == length - 1) { return false; } String[] pre = ss[0].split("\\."); if (pre.length == 0) { return false; } if (pre[0].length() < ss[0].length()) point = true; boolean result = pre(0, pre[0].length()); result = result && middle(pre[0].length() + 1, ss[0].length()); if (exponent) { result = result && is(ss[0].length() + 1, length); } return result; } ____________________________; public boolean middle(int i, int length) { if (i >= length && point) { if (chars[i - 2] >= '0' && chars[i - 2] <= '9') { return true; } return false; } for (; i < length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } public boolean is(int i, int length) { if (i == 1) { return false; } if (chars[i] == '+' || chars[i] == '-') { i++; } if (i == length) { return false; } for (; i < length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } } ```
出处:
https://edu.csdn.net/practice/27544131
代码:
import java.util.*; public class isNumber { public static class Solution { char[] chars; boolean point = false; boolean exponent = false; public boolean isNumber(String s) { s = s.trim(); int length = s.length(); if (length == 0) { return false; } chars = s.toCharArray(); String[] ss = s.split("e"); if (ss.length == 0) { return false; } if (ss[0].length() == 0) return false; if (ss[0].length() < length) exponent = true; if (ss[0].length() == length - 1) { return false; } String[] pre = ss[0].split("\\."); if (pre.length == 0) { return false; } if (pre[0].length() < ss[0].length()) point = true; boolean result = pre(0, pre[0].length()); result = result && middle(pre[0].length() + 1, ss[0].length()); if (exponent) { result = result && is(ss[0].length() + 1, length); } return result; } public boolean pre(int i, int length) { if (i >= length) { return true; } if (chars[i] == '+' || chars[i] == '-') { i++; } if (i == length && !point) { return false; } for (; i < length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } public boolean middle(int i, int length) { if (i >= length && point) { if (chars[i - 2] >= '0' && chars[i - 2] <= '9') { return true; } return false; } for (; i < length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } public boolean is(int i, int length) { if (i == 1) { return false; } if (chars[i] == '+' || chars[i] == '-') { i++; } if (i == length) { return false; } for (; i < length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } } public static void main(String[] args) { Solution s = new Solution(); String str = "0"; System.out.println(s.isNumber(str)); str = "e"; System.out.println(s.isNumber(str)); str = "."; System.out.println(s.isNumber(str)); str = ".1"; System.out.println(s.isNumber(str)); str = "-123.456e789"; System.out.println(s.isNumber(str)); str = "99e2.5"; System.out.println(s.isNumber(str)); } }
输出:
true
false
false
true
true
false
2. 存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true
示例 2:
输入: nums = [1,0,1,1], k = 1
输出: true
示例 3:
输入: nums = [1,2,3,1,2,3], k = 2
输出: false
出处:
https://edu.csdn.net/practice/27544132
代码:
import java.util.*; public class containsNearbyDuplicate { public static class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { int left = 0; int right = -1; HashMap<Integer, Integer> hashMap = new HashMap<>(); while (left < nums.length) { if (right + 1 < nums.length && right - left < k) { right++; if (hashMap.containsKey(nums[right])) { return true; } else { hashMap.put(nums[right], 1); } } else { hashMap.put(nums[left], hashMap.get(nums[left]) - 1); if (hashMap.get(nums[left]) == 0) { hashMap.remove(nums[left]); } left++; } } return false; } } public static void main(String[] args) { Solution s = new Solution(); int[] nums = {1,2,3,1}; System.out.println(s.containsNearbyDuplicate(nums, 3)); int[] nums2 = {1,0,1,1}; System.out.println(s.containsNearbyDuplicate(nums2, 1)); int[] nums3 = {1,2,3,1,2,3}; System.out.println(s.containsNearbyDuplicate(nums3, 2)); } }
输出:
true
true
false
3. 设计学生类Student和它的一个子类Undergraduate
设计一个学生类Student和它的一个子类Undergraduate,要求如下:
(1)Student类有name和age属性,一个包含两个人参数的构造器,用于给两属性赋值,一个show()方法打印Student的属性信息。
(2)本科生类Undergraduate增加一个degree(学位)属性。有一个包含三参数的构造器,前两个参数用于给集成的属性赋值,第三个参数给degree专业见值,一个show()方法用于打印Undergraduate的属性信息。
(3)在测试类中分别打印Undergraduate和Student对象,调用它们的show()
出处:
https://edu.csdn.net/practice/27544133
代码:
package T1; public class Test { public static void main(String[] args) { Student stu = new Student("student", 100); stu.show(); Undergraduate undergraduate = new Undergraduate("Undergraduate", 20, "本科"); undergraduate.show(); } } class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getAge() { return age; } public void setAge(int age) { this.age = age; } public void show() { System.out.println("名字:" + this.name + "\t年龄:" + this.age); } } class Undergraduate extends Student { private String degree; public Undergraduate(String name, int age, String degree) { super(name, age); this.degree = degree; } public void show() { System.out.println("名字:" + super.getName() + "\t年龄:" + super.getAge() + "\t学位:" + this.degree); } }
输出:
略