题目描述:给定一个数组,和一个target。找出两个值的和为target。并返回对应的下标。
class Solution {
List<int> twoSum(List<int> nums, int target) {
List<int> res = [];
var map = <int, int>{};
// 先存储
for (int i = 0; i < nums.length; i++) {
map[nums[i]] = i;
}
//再遍历
for (int i = 0; i < nums.length; i++) {
int temp = (target - nums[i]);
if (map[temp] != i && map.containsKey(temp)) {
res.add(i);
res.add(map[temp]!);
return res;
}
}
return res;
}
}
在实现本题的过程中,遇到了一个问题,这个问题的意思赋值之前要做一个非null的判断,因为在dart中null不是所有类型的子集了。本题使用的是 变量! 来进行非空判断的。
TODO:对于不同类型的变量的非空判断。
附加小知识: list可以理解为数组。
list的常用的属性:长度,判空,反转数组,根据下标索引获取元素值
list常用的方法:添加,指定位置添加,合并数组,删除,删除指定元素值,删除指定位置
TODO:后续补充其他方法
void main() {
// 定义列表
List list = [];
List<int> list1 = []; //定义列表,限定列表中元素的类型
List<int> list2 = List.from({4, 5}); //定义列表,并添加了两个元素值
List<int> list3 = List.of({1, 2}); //定义列表,并添加了两个元素值
List<int> list4 = List.filled(20, 1); //20是长度,1是元素的填充值
//在进行字符串连接的时候:如果是普通的变量可以不加大括号,如果是调用属性或者方法要加大括号
print('$list1,$list2,$list3,$list4');
// 添加元素
list1.add(1);
list1.add(2);
// list1.add('hello'); //错误,list1中的元素只能是int类型
// 数组常用的属性
// 数组的长度
print('数组的长度为:${list1.length}');
// 数组判空
print('数组为空嘛?${list1.isEmpty}');
// 反转数组
print('反转数组的结果为:${list1.reversed}');
// 获取数组中的值,通过下标的形式获取
print('获取最后一个元素的值:${list1[list1.length - 1]}');
// 数组常用的方法
// 添加元素
list1.add(3);
// 合并两个数组
list1.addAll(list2);
print('合并后的结果为:$list1');
// 从指定位置插入一个元素值
list1.insert(0, 10);
// 从指定位置插入一个数组
list1.insertAll(0, list3);
// 删除指定元素
list1.remove(1);
// 删除指定位置的元素
list1.removeAt(0);
// 删除最后一个元素
list1.removeLast();
// 清空数组
list1.clear();
}
map可以理解为key,value这种对象,所以添加一个值可以map['key']=value
TODO:后续补充属性和方法
void main() {
// 定义map
var map = {};
// 定义map,限定key和value的类型,同时赋初始值
var map1 = <String, int>{"age": 20};
// 定义map,并赋初始值
var map2 = Map.from(map);
// 定义map,并赋初始值
var map3 = Map.of({"age": 1, 'hello': 12});
// 添加或者修改属性值,如果map中有"age"这个属性就是修改,如果没有就是进行添加属性
map['age'] = 10;
// 根据key获取value值
print(map['age']);
}