• 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)

  • 相关阅读:
    jacob根据word模板和书签插入内容,在jacob1.14.3测试成功...
    在.NET上如何根据字符串动态创建控件
    rabbitvcs一款在Linux平台下类似于乌龟的SVN客户端
    平时摘录开发经验
    C#中treeview绑定xml
    ubuntu下SVN服务器安装配置
    网页中的一些常用快捷键
    python 数据类型
    python 删除空文件夹脚本
    删除指定文件的python脚本
  • 原文地址:https://www.cnblogs.com/ya-cpp/p/5357487.html
Copyright © 2020-2023  润新知