1. 杨辉三角
描述:
思路:
主要是用list集合
(1)先判断numRows为空的情况,若为空直接返回null
(2)第一行只有一个1,用list.add(1),在放到ret第一个中(ret里存的都是ArrayList)
(3)从第二行开始,循环定义当前行curRow是一个list集合,当前行第1列的数总是1,
从第二列开始到倒数第二列,循环定义上一行prevRow=ret.get(i-1),把上一行的当前列和前一列得数相加,得到的结果就是当前行curRow的当前列的数,再把最后一列curRow.add(1)
(4)最后把当前行插入到ret集合中,ret.add(curRow),然后返回return ret
class Solution {
public List<List<Integer>> generate(int numRows) {
if(numRows == 0) {return null;}
List<List<Integer>> ret = new ArrayList<>();
List<Integer> list = new ArrayList<>();
list.add(1);
ret.add(list);
for(int i = 1; i < numRows; i++){
List<Integer> curRow = new ArrayList<>();
curRow.add(1);
for(int j = 1; j < i; j++){
List<Integer> prevRow = ret.get(i - 1);
int val = prevRow.get(j) + prevRow.get(j - 1);
curRow.add(val);
}
curRow.add(1);
ret.add(curRow);
}
return ret;
}
}
调整数组把奇数放在偶数前面
描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:
可以利用快排的思想:
(1)初始化首尾指针i,j
(2)循环判断若i是奇数,代表位置正确,i++,否则i和j交换(交换后i没判断,所以i不动,j是偶数就固定了,j--)
(3)返回数组
代码:
class Solution {
public int[] exchange(int[] nums) {
for(int i = 0,j = nums.length - 1;i < j;){
if(nums[i] % 2 != 0) i++;
else swap(nums, i, j--);
}
return nums;
}
private void swap(int[] nums, int i, int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}