文件组合

待传输文件被切分成多个部分,按照原排列顺序,每部分文件编号均为一个 正整数(至少含有两个文件)。传输要求为:连续文件编号总和为接收方指定数字 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<intans = new List<int>();  //存下符合条件的List

                for (int k = ik <= (int)jk++)  

                {  

                    ans.Add(k);  //整数序列

                }  

                tempRes.Add(ans);  //将符合条件的序列放到外层

            }  

  

            i++;  //i继续加

        }  

  

        // 将List<List<int>>转换为二维数组int[][]  

        int[][] res = new int[tempRes.Count][];  

        for (int idx = 0idx < tempRes.Countidx++)  

        {  

            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)不是完全相同的东西,但它们密切相关。

  1. 数组(Array):数组是固定大小的数据集合,其中每个元素都有相同的类型,并可以通过索引来访问。在C#中,你可以声明一维、二维或多维数组。数组在声明时指定类型(例如 int[]、string[,] 等)和大小(对于非固定大小的数组,可以省略大小,由初始化时确定)。
  2. 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);

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务