Math类:
pow()函数:返回第一个数字的第二个数字的次方,
pow(10,n):返回10的n次方
Arrays.asList()可以一次性将很多元素加入到list集合中去
面试题17. 打印从1到最大的位数字
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
用返回一个整数列表来代替打印
n 为正整数
class Solution {
public int[] printNumbers(int n) {
int[] res = new int[(int) Math.pow(10,n) -1];
for(int i =0; i < res.length; i++){
res[i] = i+1;
}
return res;
}
//pow()函数:返回第一个数字的第二个数字的次方,
//pow(10,n):返回10的n次方
}
15.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<> ();
int len = nums.length;
if(nums == null || len < 3) return res;
Arrays.sort(nums);
//遍历数组
for(int i = 0 ; i < len; i++){
//外层循环搜索i的值
if(nums[i] > 0) break;
if(i > 0 && nums[i] == nums[i-1]) continue;//去重
int l = i+1;
int r = len-1;
while(l<r){
int sum = nums[i] + nums[l] + nums[r];
//内层双指针确定l和r的值
if(sum == 0){
res.add(Arrays.asList(nums[i],nums[l],nums[r]));
while(l < r && nums[l+1] == nums[l]) l++; //去重
while(l < r && nums[r]==nums[r-1]) r--;//去重复
l++;
r--;
}else if(sum <0){
l++;
}else{
r--;
}
}
}
return res;
}
}