LeetCode刷刷记录

一遍考研,一遍还是要刷刷题。感觉自己的时间安排的不是很好,还是要抓紧自己的日常时间,当然,也要练练刷题的手感。

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 }
View Code

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 }
View Code

 我去,返回头看自己以前的代码,感觉昨天写的好搓啊

 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 }
View Code

 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 }
View Code

但是,这个题目我有疑惑,并不是算法的疑惑,而是java中static变量的疑惑。因为有过用java写面向过程的代码(好吧,是java的语法问题,关于static的,以前用一直都没有问题,然后今天就有问题了)然后好好找下,看看(4.7)

原文地址:https://www.cnblogs.com/ya-cpp/p/5357487.html