# Java每日一练(20230330) Excel表列序号、最大数、颜色分类

## 1. Excel表列序号

A -> 1

B -> 2

C -> 3

...

Z -> 26

AA -> 27

AB -> 28

...

• 1 <= columnTitle.length <= 7
• columnTitle 仅由大写英文组成
• columnTitle 在范围 ["A", "FXSHRXW"]

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

class Solution {
public int titleToNumber(String s) {
char[] charArray = s.toCharArray();
int res = 0;
for (int i = 0; i < charArray.length; i++) {
res = res * 26 + (charArray[i] - 'A' + 1);
}
return res;
}
}

class Solution {
public int titleToNumber(String columnTitle) {
int res = 0;
for (int i = 0; i < columnTitle.length(); i++) {
char c = columnTitle.charAt(i);
res = res * 26 + (c - 'A' + 1);
}
return res;
}
}

## 2. 最大数

• 1 <= nums.length <= 100
• 0 <= nums[i] <= 10^9

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

class Solution {
public String largestNumber(int[] nums) {
String[] str = new String[nums.length];
for (int i = 0; i < nums.length; i++)
str[i] = String.valueOf(nums[i]);
Arrays.parallelSort(str);
for (int i = 1; i < str.length; i++)
for (int j = 0; j < i; j++) {
if (str[i].length() > str[j].length() && str[i].substring(0, str[j].length()).equals(str[j])) {
StringBuilder str1 = new StringBuilder();
StringBuilder str2 = new StringBuilder();
str1.append(str[i] + str[j]);
str2.append(str[j] + str[i]);
if (str2.toString().compareTo(str1.toString()) > 0) {
String tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
}
StringBuilder ans = new StringBuilder();
for (int i = str.length - 1; i >= 0; i--)
ans.append(str[i]);
return ans.charAt(0) == '0' ? "0" : ans.toString();
}
}

class Solution {
public String largestNumber(int[] nums) {
String[] strNums = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
strNums[i] = String.valueOf(nums[i]);
}
Arrays.sort(strNums, (s1, s2) -> (s2 + s1).compareTo(s1 + s2));
if (strNums[0].equals("0")) {
return "0";
}
StringBuilder res = new StringBuilder();
for (String str : strNums) {
res.append(str);
}
return res.toString();
}
}

class Solution {
public String largestNumber(int[] nums) {
quickSort(nums, 0, nums.length - 1);
if (nums[0] == 0) {
return "0";
}
StringBuilder res = new StringBuilder();
for (int num : nums) {
res.append(num);
}
return res.toString();
}
private void quickSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = nums[left];
while (i < j) {
while (i < j && compare(nums[j], pivot) <= 0) {
j--;
}
nums[i] = nums[j];
while (i < j && compare(nums[i], pivot) >= 0) {
i++;
}
nums[j] = nums[i];
}
nums[i] = pivot;
quickSort(nums, left, i - 1);
quickSort(nums, i + 1, right);
}
private int compare(int num1, int num2) {
String s1 = String.valueOf(num1);
String s2 = String.valueOf(num2);
return (s2 + s1).compareTo(s1 + s2);
}
}

## 3. 颜色分类

• n == nums.length
• 1 <= n <= 300
• nums[i]012

• 你可以不使用代码库中的排序函数来解决这道题吗？
• 你能想出一个仅使用常数空间的一趟扫描算法吗？

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

class Solution {
public void sortColors(int[] nums) {
int low = 0, high = nums.length - 1;
int i = 0;
while (i <= high) {
if (nums[i] == 0) {
int tmp = nums[i];
nums[i] = nums[low];
nums[low] = tmp;
++low;
++i;
} else if (nums[i] == 1) {
++i;
} else if (i <= high && nums[i] == 2) {
int tmp = nums[i];
nums[i] = nums[high];
nums[high] = tmp;
--high;
}
}
}
}

class Solution {
public void sortColors(int[] nums) {
int[] counts = new int[3]; // 统计 0, 1, 2 出现的次数
for (int i = 0; i < nums.length; i++) {
counts[nums[i]]++;
}
int index = 0;
for (int i = 0; i < counts[0]; i++) {
nums[index++] = 0;
}
for (int i = 0; i < counts[1]; i++) {
nums[index++] = 1;
}
for (int i = 0; i < counts[2]; i++) {
nums[index++] = 2;
}
}
}

class Solution {
public void sortColors(int[] nums) {
int left = 0, right = nums.length - 1;
int i = 0;
while (i <= right) {
if (nums[i] == 0) {
swap(nums, i, left);
left++;
i++;
} else if (nums[i] == 2) {
swap(nums, i, right);
right--;
} else {
i++;
}
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}

## 🌟 每日一练刷题专栏 🌟

👍 点赞，你的认可是我坚持的动力！

🌟 收藏，你的青睐是我努力的方向！

|
1月前
|

【5月更文挑战第12天】基于Java爬取微博数据，正文长文本+导出数据Excel
219 5
|
1月前
|
Java 编译器
Java一分钟之——异常分类：检查异常与运行时异常
【5月更文挑战第20天】Java异常处理分为检查异常（Checked Exceptions）和运行时异常（Unchecked Exceptions），两者在编译期处理方式不同。检查异常需捕获或声明，如IOException，而运行时异常如NullPointerException在运行时终止程序。常见问题包括不恰当的异常使用、过度捕获和忽略异常信息。避免策略包括正确区分异常类型、具体捕获和处理异常信息。示例代码展示了如何处理这两种类型的异常。理解并妥善处理异常能提升程序的健壮性和可维护性。
50 4
|
1月前
|
Java
java导出复杂excel
java导出复杂excel
23 1
|
7天前
|
Java Maven
Java 怎样从 excel 中读取文件、写入文件
Java 怎样从 excel 中读取文件、写入文件
13 0
|
10天前
|

9 1
|
10天前
|

8 2
|
11天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇（六十八）-java+ selenium自动化测试 - 读写excel文件 - 下篇（详细教程）
【6月更文挑战第9天】本文介绍了如何使用Java处理Excel文件中的不同数据类型，包括日期、数字、布尔值和标签（常规字符串）。文章提供了两个示例，分别使用JXL库和Apache POI库来读取Excel文件。
13 1
|
12天前
|
XML Java 测试技术
《手把手教你》系列技巧篇（六十七）-java+ selenium自动化测试 - 读写excel文件 - 中篇（详细教程）
【6月更文挑战第8天】本文介绍了Java中操作Excel的工具，包括POI和JXL。POI支持处理Office 2003及以下的OLE2格式（.xls）和2007以上的OOXML格式（.xlsx）。而JXL只能处理2003版本的Excel文件。文章详细讲解了如何下载和使用JXL库，并给出了一个简单的Java代码示例，展示如何读取2003版Excel文件中的数据。在实际项目中，由于JXL对新版本Excel的支持限制，通常推荐使用POI。
25 5
|
13天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇（六十六）-java+ selenium自动化测试 - 读写excel文件 - 上篇（详细教程）
【6月更文挑战第7天】本文介绍了在Java自动化测试中如何操作Excel数据。文章提到了当测试数据存储在Excel文件时，可以使用Apache的POI库来读写Excel。POI提供了对OLE2（.xls）和OOXML（.xlsx）格式的支持，比JXL库功能更全面。文章还详细讲解了如何下载和添加POI库到项目中，以及准备测试用的Excel文件。最后，给出了一个简单的Java代码示例，演示如何读取Excel文件的内容。
14 1
|
20天前

47 0