NC111 最大数
1、解题思路
将数组封装到一个list中,然后对list中的数字进行排序。排序的思想是将权值大的数字排到前面。比如 4 > 12。其实就是4放到最高位,能产生更大的数字。
2、代码
import java.util.*;
public class Solution {
/**
* 最大数
* @param nums int整型一维数组
* @return string字符串
*/
public String solve (int[] nums) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
}
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
String s1 = String.valueOf(o1);
String s2 = String.valueOf(o2);
return (s1 + s2).compareTo(s2 + s1) * -1;
}
});
StringBuilder sb = new StringBuilder();
list.forEach(str -> sb.append(str));
if (sb.charAt(0) == '0') {
return "0";
}
return sb.toString();
}
}
NC113 验证IP地址
1、解题思路
# 就是普通的字符串处理,
1. IPv4中不能出现除0~9的其他字符,必须分割出4个,长度不为1的时候字符串头部不能为0
2. IPv6中单个16进制的长度不能大于4,
2、代码
import java.util.*;
public class Solution {
/**
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
public String solve (String ip) {
if (ip.contains(".")) {
String[] split = ip.split("\\.");
if (split.length != 4) {
return "Neither";
} else {
for (String s : split) {
if (s.length() != 1 && s.charAt(0) == '0') {
return "Neither";
}
for (int i = 0; i < s.toCharArray().length; i++) {
char c = s.charAt(i);
if (c < '0' || c > '9') {
return "Neither";
}
}
int val = Integer.parseInt(s);
if (val < 0 || val > 255) {
return "Neither";
}
}
return "IPv4";
}
}
if (ip.contains(":")) {
String[] split = ip.split(":");
if (split.length != 8) {
return "Neither";
}
for (String s : split) {
if (s.length() > 4) {
return "Neither";
}
for (char c : s.toCharArray()) {
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')) {
continue;
} else {
return "Neither";
}
}
}
return "IPv6";
}
return "Neither";
}
}
NC10 大数乘法
1、解题思路
把每个字符相乘,把结果保存到数组中。然后数组中每个都保证一位就好,拼接数组中的元素就好。
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
StringBuilder sb = new StringBuilder();
String s1 = new StringBuilder(s).reverse().toString();
String s2 = new StringBuilder(t).reverse().toString();
int len1 = s1.length();
int len2 = s2.length();
int[] arr = new int[len1 + len2 + 3];
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
int val1 = s1.charAt(i) - 48;
int val2 = s2.charAt(j) - 48;
arr[i + j] += val1 * val2;
}
}
for (int i = 1; i < arr.length; i++) {
int carry = arr[i-1] / 10;
arr[i - 1] %= 10;
arr[i] += carry;
}
int index = arr.length - 1;
while (index > 0 && arr[index] == 0) {
index--;
}
for (int i = 0; i <= index; i++) {
sb.append(arr[i]);
}
return sb.reverse().toString();
}
}