一遍考研,一遍还是要刷刷题。感觉自己的时间安排的不是很好,还是要抓紧自己的日常时间,当然,也要练练刷题的手感。
1.第一题就两重循环找到索引就OK,因为是无序的,所以就不能用二分来查找,题目中每个数的下标是定死的,所以不能排序后再二分。真是太年轻,什么都想试试(4.5)

1 public class Solution { 2 public int[] twoSum(int[] nums, int target) { 3 int[] arr = new int[2]; 4 int cnt = 0; 5 for(int i = 0; i < nums.length; ++i){ 6 for(int j = i+1; j < nums.length; ++j) { 7 if(nums[i] + nums[j] == target){ 8 arr[cnt] = i; 9 cnt++; 10 arr[cnt] = j; 11 cnt++; 12 } 13 } 14 } 15 return arr; 16 } 17 }
2.第二题就是个简单的java单链表,将两个链表合成一个链表。需要简单考虑一下进位问题,调试还是调试了一会儿,链表又有段时间没用过了,想了半天。

1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 11 int t1, t2; 12 ListNode head; 13 t1 = (l1.val + l2.val) % 10; 14 ListNode l = new ListNode(t1); 15 head = l; 16 t2 = (l1.val + l2.val) / 10; 17 while(l1.next != null && l2.next != null){ 18 l1 = l1.next; 19 l2 = l2.next; 20 t1 = (l1.val + l2.val + t2) % 10; 21 t2 = (l1.val + l2.val + t2) / 10; 22 ListNode ltmp = new ListNode(t1); 23 l.next = ltmp; 24 l = l.next; 25 } 26 while(l1.next!=null){ 27 l1 = l1.next; 28 t1 = (l1.val + t2) % 10; 29 t2 = (l1.val + t2) / 10; 30 ListNode ltmp = new ListNode(t1); 31 l.next = ltmp; 32 l = l.next; 33 } 34 while(l2.next != null) { 35 l2 = l2.next; 36 t1 = (l2.val + t2) % 10; 37 t2 = (l2.val + t2) / 10; 38 ListNode ltmp = new ListNode(t1); 39 l.next = ltmp; 40 l = l.next; 41 } 42 if(t2 != 0){ 43 ListNode ltmp = new ListNode(t2); 44 l.next = ltmp; 45 l = l.next; 46 } 47 return head; 48 } 49 }
我去,返回头看自己以前的代码,感觉昨天写的好搓啊

1 public class Solution { 2 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 3 ListNode ret = new ListNode(0); 4 ListNode cur = ret; 5 6 int sum = 0; 7 while(true) { 8 if(l1 != null) { 9 sum += l1.val; 10 l1 = l1.next; 11 } 12 if(l2 != null) { 13 sum += l2.val; 14 l2 = l2.next; 15 } 16 cur.val = sum % 10; 17 sum /= 10; 18 19 if(l1 != null || l2 != null || sum != 0) { 20 //cur = (cur.next = new ListNode(0)); 21 cur.next = new ListNode(0); 22 cur = cur.next; 23 } else { 24 break; 25 } 26 } 27 return ret; 28 } 29 }
3.第37题sudu,这个题目好吧,我猥琐的用了之前的代码,就dfs就可以

1 package LeetCode; 2 3 /** 4 * Created by lenovo on 2016-04-07. 5 */ 6 7 public class Solution { 8 static int[][] row = new int[9][9]; 9 static int[][] col = new int[9][9]; 10 static int[][] per = new int[9][9]; 11 static int[][] map = new int[9][9]; 12 static boolean isFind = false; 13 14 public void solveSudoku(char[][] board) { 15 fill(row); 16 fill(col); 17 fill(per); 18 isFind = false; 19 int k; 20 for(int i = 0; i < 9; ++i) 21 for(int j = 0; j < 9; ++j){ 22 if(board[i][j] != '.'){ 23 k = board[i][j] - '0'; 24 map[i][j] = k - 1; 25 if(k != 0){ 26 row[i][k-1] = col[j][k-1] = 27 per[(i/3)*3+(j/3)][k-1] = 1; 28 } 29 }else{ 30 map[i][j] = -1; 31 } 32 } 33 34 dfs(0, 0, board); 35 } 36 static void fill(int[][] a){ 37 for(int i = 0; i < 9; ++i){ 38 for(int j = 0; j < 9; ++j){ 39 a[i][j] = 0; 40 } 41 } 42 } 43 public static void dfs(int x, int y, char[][] board){ 44 int u = x * 9 + y + 1; 45 if(x == 9){ 46 isFind = true; 47 for(int i = 0; i < 9; ++i) 48 for(int j = 0; j < 9; ++j) 49 board[i][j] = (char)(map[i][j] + '0' + 1); 50 } 51 if(isFind) return; 52 if(map[x][y] != -1){ 53 dfs(u/9, u%9, board); 54 return; 55 } 56 57 for(int i = 0; i < 9 && !isFind; ++i){ 58 int k = (x/3)*3 + y/3; 59 if(row[x][i] == 0 && col[y][i] == 0 && per[k][i] == 0){ 60 row[x][i] = col[y][i] = per[k][i] = 1; 61 map[x][y] = i; 62 63 dfs(u/9, u%9, board); 64 65 row[x][i] = col[y][i] = per[k][i] = 0; 66 map[x][y] = -1; 67 } 68 } 69 } 70 71 public static void main(String[] args){ 72 char[][] board = { {'.','.','9','7','4','8','.','.','.'}, 73 {'7','.','.','.','.','.','.','.','.'}, 74 {'.','2','.','1','.','9','.','.','.'}, 75 {'.','.','7','.','.','.','2','4','.'}, 76 {'.','6','4','.','1','.','5','9','.'}, 77 {'.','9','8','.','.','.','3','.','.'}, 78 {'.','.','.','8','.','3','.','2','.'}, 79 {'.','.','.','.','.','.','.','.','6'}, 80 {'.','.','.','2','7','5','9','.','.'}}; 81 82 Solution s = new Solution(); 83 s.solveSudoku(board); 84 } 85 }
但是,这个题目我有疑惑,并不是算法的疑惑,而是java中static变量的疑惑。因为有过用java写面向过程的代码(好吧,是java的语法问题,关于static的,以前用一直都没有问题,然后今天就有问题了)然后好好找下,看看(4.7)