文件组合
待传输文件被切分成多个部分,按照原排列顺序,每部分文件编号均为一个 正整数(至少含有两个文件)。传输要求为:连续文件编号总和为接收方指定数字 target 的所有文件。请返回所有符合该要求的文件传输组合列表。
注意,返回时需遵循以下规则:
每种组合按照文件编号 升序 排列;
不同组合按照第一个文件编号 升序 排列
示例 1:
输入:target = 12
输出:[[3, 4, 5]]
解释:在上述示例中,存在一个连续正整数序列的和为 12,为 [3, 4, 5]。
示例 2:
输入:target = 18
输出:[[3,4,5,6],[5,6,7]]
解释:在上述示例中,存在两个连续正整数序列的和分别为 18,分别为 [3, 4, 5, 6] 和 [5, 6, 7]。
提示:
1 <= target <= 10^5
public class Solution {
public int[][] FileCombination(int target) {
List<List<int>> tempRes = new List<List<int>>(); // 临时使用List<List<int>>来构建结果
int i = 1;
double j = 2.0;
while (i < j)
{
j = (-1 + Math.Sqrt(1 + 4 * (2 * target + (long)i * i - i))) / 2;
// 四舍五入取整
//计算公式中
//计算公式中 i的平方项可能超过 int 类型取值范围,因此在 Java, C++ 中需要转化成 long 类型。
//j是通过i和输入的target计算出来的,所以i增加j也会增加
//约束在于target
if (i < j && j == (int)j)
{
List<int> ans = new List<int>(); //存下符合条件的List
for (int k = i; k <= (int)j; k++)
{
ans.Add(k); //整数序列
}
tempRes.Add(ans); //将符合条件的序列放到外层
}
i++; //i继续加
}
// 将List<List<int>>转换为二维数组int[][]
int[][] res = new int[tempRes.Count][];
for (int idx = 0; idx < tempRes.Count; idx++)
{
res[idx] = tempRes[idx].ToArray(); // 使用ToArray方法将List<int>转换为int[]
}
//res[idx] = tempRes[idx].ToArray(); 这行代码是在 C# 中将 List<int> 转换为 int[] 的一个关键步骤。这里,tempRes 是一个 List<List<int>>,即一个列表的列表,其中每个内部列表 (tempRes[idx]) 都是一个 List<int>。
/*当你调用 ToArray() 方法时,它会返回一个新创建的数组,该数组包含 List<int> 中的所有元素。然后,这个新创建的数组被赋值给二维数组 res 的当前行 (res[idx])。
以下是这个过程的简单概述:
tempRes 是一个 List<List<int>>,包含多个 List<int>。
tempRes[idx] 获取 tempRes 列表中的第 idx 个 List<int>。
tempRes[idx].ToArray() 将这个 List<int> 转换为一个 int[] 数组。
res[idx] = ... 将这个新创建的 int[] 数组赋值给二维数组 res 的第 idx 行。
这样,当你遍历完 tempRes 列表中的所有 List<int> 后,res 二维数组就包含了所有转换后的数组,每个数组都是原始列表中对应 List<int> 的元素副本。*/
return res;
}
}
//在C#中,List<int[]>可以转换为int[][]。List<T>.ToArray() 方法会返回一个包含列表中所有元素的数组,当 T 是数组类型(如 int[])时,这个方法会返回一个二维数组(在这个例子中是int[][])
//
在C#中,Array
类和数组(array)不是完全相同的东西,但它们密切相关。
- 数组(Array):数组是固定大小的数据集合,其中每个元素都有相同的类型,并可以通过索引来访问。在C#中,你可以声明一维、二维或多维数组。数组在声明时指定类型(例如 int[]、string[,] 等)和大小(对于非固定大小的数组,可以省略大小,由初始化时确定)。
- Array 类:Array 类是C#中所有数组类型的基类。它提供了许多方法和属性,用于处理数组,如排序、搜索、复制等。由于所有的数组类型都继承自 Array 类,因此你可以使用这些方法和属性来操作任何类型的数组。 例如,你可以使用 Array.Sort 方法来对数组进行排序:或者,你可以使用 Array.GetLength 方法来获取数组的长度:
由于 Array
类是所有数组类型的基类,因此你可以将任何类型的数组传递给接受 Array
类型参数的方法。但是,这并不意味着数组和 Array
类是完全相同的。数组是具体的数据结构实例,而 Array
类是提供了操作这些实例的方法的基类。
总结一下,数组是具体的数据结构,用于存储固定大小的同类型数据集合,而 Array
类是提供了操作这些数组的静态方法和属性的基类。
今天写作业,写到有一个char,调用并返回String类型,完了之后我想这个还不简单吗。于是信笔写下
char[] chars = { 'H', 'o', 'w', ' ', 'A', 'r', 'e', ' ', 'Y', 'o', 'u' };
System.out.println(chars.toString());
1
2
然而却只能打印出一串奇怪的字符串
[C@7852e922
1
如果要是单纯打印的话就算了,可以用以下语句
char[] chars = { 'H', 'o', 'w', ' ', 'A', 'r', 'e', ' ', 'Y', 'o', 'u' };
System.out.println(chars);
1
2
但是当下是要返回一个字符串类型
于是就有了以下语句可以转化为String
char[] chars = { 'H', 'o', 'w', ' ', 'A', 'r', 'e', ' ', 'Y', 'o', 'u' };
String string = Arrays.toString(chars);
System.out.println(string);
1
2
3
打印出来是这样子的
[H, o, w, , A, r, e, , Y, o, u]
1
要转化为完整字符串并打印出来How Are You该怎么办呢,
那就只能用String的一个构造函数来作用了
char[] chars = { 'H', 'o', 'w', ' ', 'A', 'r', 'e', ' ', 'Y', 'o', 'u' };
String string = new String(chars);
System.out.println(string);
1
2
3
或者用这个有点复杂的东西
char[] chars = { 'H', 'o', 'w', ' ', 'A', 'r', 'e', ' ', 'Y', 'o', 'u' };
String string = new String();
for (int i = 0; i < chars.length; i++) {
string += Character.toString(chars[i]);
}
System.out.println(string);