leetcode6 找规律
class Solution {
public String convert(String s, int numRows) {
if(s == null || s.length()==0 || numRows <=0)
return "";
if(numRows == 1)
return s;
StringBuilder result = new StringBuilder();
int size = 2*numRows-2;
for(int i = 0; i< numRows; i++) {
for(int j = i; j< s.length(); j+=size) {
result.append(s.charAt(j));
if(i !=0 && i != numRows-1) { // if i is not the first and last row
int temp = j+size-2*i;
if(temp < s.length()) {
result.append(s.charAt(temp));
}
}
}
}
return result.toString();
}
}
leetcode 指针类 16 3sum-closest
class Solution {
public int threeSumClosest(int[] nums, int target) {
if (nums.length==0 ) return 0;
Arrays.sort(nums);
int result=nums[0]+nums[1]+nums[nums.length-1];
for(int i=0;i<nums.length-2;i++){
if(i>0&&nums[i]==nums[i-1]) continue;
int left=i+1;int right=nums.length-1;
while(left<right){
int sum=nums[i]+nums[left]+nums[right];
if(sum==target) return target;
if(Math.abs(result-target)>Math.abs(sum-target)) result=sum;
if(sum>target) right--;
if(sum<target) left++;
}
}
return result;
}
}
leetcode24 交换节点,重点是指针的交换,只有指针(额外设的)指向链表的相应位置,并且注意交换条件
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null)
return null;
//表头节点,默认链表中的数据都为正数
ListNode preHead = new ListNode(-1);
preHead.next=head;
ListNode left=preHead;
ListNode mid=head;
if(head.next==null) //如果只有一个节点,直接返回这个节点
return head;
ListNode right=head.next;
while(mid!=null && mid.next!=null){
mid.next=right.next; //交换节点的过程
right.next=mid;
left.next=right;
left=mid; //移动节点的过程
mid=left.next;
if(mid!=null) //注意细节:首先要保证mid不为null,才能将mid.next赋值给right。
right=mid.next;
}
return preHead.next;
}
}
leetcode 58:这个题目恶心在空格可能在每个位置,顺便复习String的方法
class Solution {
public int lengthOfLastWord(String s) {
return s.trim().length()-s.trim().lastIndexOf(" ")-1;
}
}
if(s.length()==0) return 0;
String [] str=s.trim().split(" ");
return str[str.length-1].length();
leetcode73 二维矩阵的用法
class Solution {
public void setZeroes(int[][] matrix) {
//从某一行或者某一列入手
boolean rowFlag=false,colFlag=false;
//第一行是否含零
for(int col=0;col<matrix[0].length;col++){
if(matrix[0][col]==0){
rowFlag=true;
break;
}
}
//第一列是否含零
for(int row=0;row<matrix.length;row++){
if(matrix[row][0]==0){
colFlag=true;
break;
}
}
for(int col=1;col<matrix[0].length;col++){
for(int row=1;row<matrix.length;row++){
if(matrix[row][col]==0){
matrix[0][col]=0;
matrix[row][0]=0;
}
}
}
for(int col=1;col<matrix[0].length;col++){
if(matrix[0][col]==0){
for(int row=1;row<matrix.length;row++){
matrix[row][col]=0;
}
}
}
for(int row = 1;row < matrix.length;row++){
if(matrix[row][0] == 0){
for(int col = 1;col < matrix[0].length;col++){
matrix[row][col] = 0;
}
}
}
//第一行置零
if(rowFlag == true){
for(int col = 0;col < matrix[0].length;col++){
matrix[0][col] = 0;
}
}
//第一列置零
if(colFlag == true){
for(int row = 0;row < matrix.length;row++){
matrix[row][0] = 0;
}
}
}
}
leetcode74
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0){
return false;
}
int targetrow=0;
boolean flag=false;
//判断在哪一行
int rowLen =matrix[0].length;
if (rowLen == 0) {
return false;
}
for(int row=0;row<matrix.length;row++){
if (target <= matrix[row][rowLen - 1]) {
targetrow = row;
break;
}
}
//判断在哪一列
for(int col=0;col<matrix[0].length;col++){
if(matrix[targetrow][col]==target){
flag=true;
}
}
return flag;
}
}
leetcode 240
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length==0)
return false;
int i = matrix.length-1,j=0;
while(i>=0 && j<matrix[0].length){
if (matrix[i][j] == target)
return true;
else if(matrix[i][j]>target)
i--;
else if(matrix[i][j]<target)
j++;
}
return false;
}
}