leetcode1

66 阅读2分钟

1. 两数之和 - 力扣(LeetCode)

题目描述:给定一个数组,和一个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不是所有类型的子集了。本题使用的是 变量! 来进行非空判断的。

image.png

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']);
}