Schnallenübung 1 (10 Fragen)

1. Bei einem gegebenen Integer-Array nums und einem Integer-Zielwert-Ziel suchen Sie bitte die beiden Integer im Array, deren Summe der Zielwert-Zielwert ist, und geben Sie ihre Array-Indizes zurück.

Sie können davon ausgehen, dass es für jede Eingabe nur eine Antwort geben wird. Dasselbe Element im Array darf jedoch in der Antwort nicht wiederholt werden.

Sie können Antworten in beliebiger Reihenfolge zurückgeben.

Beispiel 1:

Eingabe: nums = [2,7,11,15], Ziel = 9
Ausgabe: [0,1]
Erklärung: Da nums[0] + nums[1] == 9, geben Sie [0, 1] zurück.
Beispiel 2:

Eingabe: nums = [3,2,4], Ziel = 6
Ausgabe: [1,2]
Beispiel 3:

Eingabe: Zahlen = [3,3], Ziel = 6
Ausgabe: [0,1]

class Solution {
    public int[] twoSum(int[] nums, int target) {

    int [] result=new int[2];

            for(int i=0;i<=nums.length;i++){

                for(int j=i+1;j<=nums.length-1;j++){


                    int sum=nums[j]+nums[i];
                    if(sum==target){
                     result[0]=i;
                     result[1]=j;
                    }


                }

            }



            return result;
}




}

2. Bei einer gegebenen vorzeichenbehafteten 32-Bit-Ganzzahl x das Ergebnis der Invertierung des Ziffernteils von x zurückgeben.

Gibt 0 zurück, wenn die invertierte Ganzzahl den Bereich [−231, 231 − 1] für 32-Bit-Ganzzahlen mit Vorzeichen überschreitet.

Angenommen, die Umgebung erlaubt keine Speicherung von 64-Bit-Ganzzahlen (mit oder ohne Vorzeichen).

Beispiel 1:

Eingabe: x = 123
Ausgabe: 321
Beispiel 2:

Eingabe: x = -123
Ausgabe: -321
Beispiel 3:

Eingabe: x = 120
Ausgabe: 21
Beispiel 4:

Eingabe: x = 0
Ausgabe: 0
 

Hinweis:

-231 <= x <= 231 - 1

 public static int reverse(int x) {


            try {

                boolean b = true;
                if (x < 0) {
                    x = x * (-1);
                    b = false;
                }
                String num = String.valueOf(x);
                String num2 = "";
                for (int i = num.length() - 1; i >= 0; i--) {

                    if (num.charAt(i) != 'a') {
                        num2 += num.charAt(i);
                    }
                }

                if (b) {
                    return Integer.parseInt(num2);
                } else {
                    return -Integer.parseInt(num2);
                }


            } catch (Exception e) {
                return 0;
            }
        }

3. Du und dein Freund, zwei Leute spielen zusammen Nim-Spiel:

Auf dem Tisch liegt ein Steinhaufen.
Sie wechseln sich ab, mit Ihnen als Erster.
In jeder Runde entfernt die Person, die an der Reihe ist, 1-3 Steine.
Wer den letzten Stein nimmt, ist Sieger.
Gehen Sie davon aus, dass jeder Ihrer Schritte eine optimale Lösung ist. Schreiben Sie eine Funktion, die feststellt, ob Sie das Spiel bei einer gegebenen Anzahl von n Steinen gewinnen können. Gibt „true“ zurück, wenn es möglich ist zu gewinnen, ansonsten „false“.

Beispiel 1:

Input: n = 4
Output: false 
Erklärung: Wenn 4 Steine ​​im Stapel sind, dann wirst du das Spiel nie gewinnen,
     denn egal ob du 1, 2 oder 3 Steine ​​nimmst, der letzte Stein wird immer von deinen Freunden genommen.
Beispiel 2:

Eingabe: n=1
Ausgabe: wahr
Beispiel 3:

Eingabe: n=2
Ausgabe: wahr
 

Hinweis:

1 <= n <= 231 - 1

 public boolean canWinNim(int n) {

        try {
        if(1<=n&&n<=3){
            return true;
        }
        else {
            if(n%4==0){
                return false;
            }
            return true;
        }
        }catch (Exception e){
            return false;

        }

    }

4. Anzahl der Palindrome

Bei einer gegebenen ganzen Zahl x wird wahr zurückgegeben, wenn x ein Palindrom ist, andernfalls wird falsch zurückgegeben.

Ein Palindrom ist eine ganze Zahl, die in positiver Reihenfolge (von links nach rechts) und in umgekehrter Reihenfolge (von rechts nach links) gelesen wird. Zum Beispiel ist 121 ein Palindrom, aber 123 nicht.

Beispiel 1:

Eingabe: x = 121
Ausgabe: wahr
Beispiel 2:

Eingabe: x = -121
Ausgabe: falsch
Erklärung: Von links nach rechts gelesen, es ist -121. Von rechts nach links gelesen, ist es 121-. Daher ist es kein Palindrom.
Beispiel 3:

Eingabe: x = 10
Ausgabe: falsch
Erklärung: Von rechts nach links lesen, 01. Daher ist es kein Palindrom.
Beispiel 4:

Eingabe: x=-101
Ausgabe: falsch

Hinweis:

-231 <= x <= 231 - 1

class Solution {
    public boolean isPalindrome(int x) {

        
  try {
      if (x < 0) {
          return false;
      } else {
          String num = String.valueOf(x);
          String num2 = "";
          for (int i = num.length() - 1; i >= 0; i--) {

              if (num.charAt(i) != 'a') {
                  num2 += num.charAt(i);
              }
          }
        
          if (Integer.parseInt(num2) == x) {
              return true;
          } 
              return false;
          
      }
    }catch (Exception e){
      return false;
  }

    }
}

5. Fügen Sie zwei Zahlen hinzu

Sie erhalten zwei nicht leere verknüpfte Listen, die zwei nicht negative ganze Zahlen darstellen. Sie werden pro Ziffer in umgekehrter Reihenfolge gespeichert, und jeder Knoten kann nur eine Ziffer speichern.

Bitte fügen Sie zwei Zahlen hinzu und senden Sie eine verknüpfte Liste zurück, die die Summe in derselben Form darstellt.

Sie können davon ausgehen, dass keine der Zahlen mit 0 beginnt, außer der Zahl 0.

Eingabe: l1 = [2,4,3], l2 = [5,6,4]
Ausgabe: [7,0,8]
Erklärung: 342 + 465 = 807.
Beispiel 2:

Eingang: l1 = [0], l2 = [0]
Ausgang: [0]
Beispiel 3:

Eingang: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Ausgang: [8,9,9,9,0,0,0,1]
 

Hinweis:

Die Anzahl der Knoten in jeder verknüpften Liste liegt im Bereich [1, 100]
0 <= Node.val <= 9.
Die Titeldaten stellen sicher, dass die durch die Liste dargestellte Zahl keine führenden Nullen enthält

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        
     
        List<Integer> listNodes1=new ArrayList<>();
        while (true){
            listNodes1.add(l1.val);
            if (l1.next==null){
                break;
            }
            l1=l1.next;

        }

        List<Integer> listNodes2=new ArrayList<>();
        while (true){
            listNodes2.add(l2.val);
            if (l2.next==null){
                break;
            }
            l2=l2.next;
        }
        String num1="";
        String num2="";
        int num=0;
        int redis=0;
        int redis2=0;

        SingleLinkedList singleLinkedList=new SingleLinkedList();
        ListNode listNode=null;
        ListNode listNode2=null;
        List<Integer> maxList=new ArrayList<>();
        int max=0;
        int min=0;
       // System.out.println("listNodes1.size()="+listNodes1.size());
        //System.out.println("listNodes2.size()="+listNodes2.size());
        if(listNodes1.size()>listNodes2.size()){
            max=listNodes1.size();
            min=listNodes2.size();
            maxList= listNodes1;
        }
        else {
            max=listNodes2.size();
            min=listNodes1.size();
            maxList=  listNodes2;
        }
        System.out.println("max="+max);
        System.out.println("min="+min);

        for (int i=0;i<max;i++){

             if(i<min){
                num=listNodes2.get(i)+listNodes1.get(i)+redis2;
                if (num>10){
                    redis=num%10;
                    redis2=1;
                   listNode2=new ListNode(redis);


                }
               else if (num==10){
                    redis=0;
                    redis2=1;
                   listNode2=new ListNode(redis);

                }
               else {
                    listNode2=new ListNode(num);
                    redis2=0;
                }

                listNode=singleLinkedList.add(listNode2);
            }
            if(i>=min) {

                 num=maxList.get(i)+redis2;
                 if (num>10){
                     redis=num%10;
                     redis2=1;
                     listNode2=new ListNode(redis);


                 }
                 else if (num==10){
                     redis=0;
                     redis2=1;
                //     System.out.println("000");
                     listNode2=new ListNode(redis);

                 }
                 else {
                     listNode2=new ListNode(num);
                     redis2=0;
                 }
                listNode=singleLinkedList.add(listNode2);
             }
        }
        if(redis2>0){
            listNode2=new ListNode(redis2);
            listNode=singleLinkedList.add(listNode2);
        }




        return listNode;

    }
}
class SingleLinkedList {
        //先初始化一个头节点,头节点不用动
     ListNode head = new ListNode(0);

        public ListNode add(ListNode listNode) {
           ListNode temp=head;

            //遍历链表,找到最后
            while (true){
                //找到链表最后
                if(temp.next==null){
                    break;
                }
                //如果没有找到最后,将temp后移

                temp=temp.next;
            }
            //当退出while循环时,temp就指向了链表的最后
            //将最后节点的next,指向新的节点
            temp.next=listNode;

            return head.next;
        }
    }

6. Römische Ziffern in ganze Zahlen

Römische Ziffern enthalten die folgenden sieben Zeichen: I, V, X, L, C, D und M.

Zeichenwert
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Zum Beispiel wird die römische Zahl 2 als II geschrieben, was zwei parallele 1en sind, 12 wird als XII geschrieben, was X + II ist. 27 wird als XXVII geschrieben, was XX + V + II ist.

Typischerweise stehen kleinere Zahlen in römischen Ziffern rechts von größeren Zahlen. Aber es gibt Ausnahmen, zum Beispiel wird 4 nicht als IIII geschrieben, sondern als IV. Die Zahl 1 steht links von der Zahl 5, und die dargestellte Zahl ist gleich der Zahl 4, die man erhält, wenn man die Zahl 1 von der großen Zahl 5 subtrahiert. Ebenso wird die Zahl 9 als IX dargestellt. Diese besondere Regel gilt nur für die folgenden sechs Fälle:

I kann links von V (5) und X (10) platziert werden, um 4 und 9 darzustellen.
X kann links von L (50) und C (100) platziert werden, um 40 und 90 darzustellen. 
C kann links von D (500) und M (1000) platziert werden, um 400 und 900 darzustellen.
Wandle eine gegebene römische Zahl in eine Ganzzahl um. Stellen Sie sicher, dass die Eingabe im Bereich von 1 bis 3999 liegt

Beispiel 1:

Eingang: „III“
Ausgang: 3
Beispiel 2:

Eingang: „IV“
Ausgang: 4
Beispiel 3:

Eingabe: „IX“
Ausgabe: 9
Beispiel 4:

Eingabe: „LVIII“
Ausgabe: 58
Erklärung: L = 50, V= 5, III = 3.
Beispiel 5:

Eingabe: „MCMXCIV“
Ausgabe: 1994
Erklärung: M = 1000, CM = 900, XC = 90, IV = 4.

Hinweis:

1 <= s.length <= 15
s enthält nur Zeichen ('I', 'V', 'X', 'L', 'C', 'D', 'M')
Die Artikeldaten garantieren, dass s ein a ist gültige römische Ziffern und zeigen an, dass die Ganzzahl im Bereich [1, 3999] liegt.Die
in der Frage angegebenen Testfälle entsprechen alle den Schreibregeln für römische Ziffern, und es wird keine Situation mit Kreuzziffern geben.
Beispiele wie IL und IM erfüllen die Titelanforderungen nicht, 49 sollte als XLIX geschrieben werden und 999 sollte als CMXCIX geschrieben werden.
Ausführliche Schreibregeln für römische Ziffern finden Sie unter Römische Ziffern - Mathematik .
Bestanden 463.234 Eingereicht 732.562

class Solution {
    public int romanToInt(String s) {

  int values[] ={1,4,5,9,10,40,50,90,100,400,500,900,1000};
        String roman[]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
       int Roman=0;
     
          for(int i=0;i<s.length();i++){

              for(int j=12;j>=0;j--) {
                  if (i + 1 < s.length() && (String.valueOf(s.charAt(i)) + String.valueOf(s.charAt(i+1))).equals(roman[j])){

                      Roman+=values[j];
                      i++;
                      break;
                  }
                  else {
                      if (String.valueOf(s.charAt(i)).equals(roman[j])) {
                          Roman += values[j];

                      }
                  }


              }


          }


        return Roman;


    }
}

7. Ganzzahl in römische Zahl

Römische Ziffern enthalten die folgenden sieben Zeichen: I, V, X, L, C, D und M.

Zeichenwert
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Zum Beispiel wird die römische Zahl 2 als II geschrieben, was zwei parallele 1en sind, 12 wird als XII geschrieben, was X + II ist. 27 wird als XXVII geschrieben, was XX + V + II ist.

Typischerweise stehen kleinere Zahlen in römischen Ziffern rechts von größeren Zahlen. Aber es gibt Ausnahmen, zum Beispiel wird 4 nicht als IIII geschrieben, sondern als IV. Die Zahl 1 steht links von der Zahl 5, und die dargestellte Zahl ist gleich der Zahl 4, die man erhält, wenn man die Zahl 1 von der großen Zahl 5 subtrahiert. Ebenso wird die Zahl 9 als IX dargestellt. Diese besondere Regel gilt nur für die folgenden sechs Fälle:

I kann links von V (5) und X (10) platziert werden, um 4 und 9 darzustellen.
X kann links von L (50) und C (100) platziert werden, um 40 und 90 darzustellen. 
C kann links von D (500) und M (1000) platziert werden, um 400 und 900 darzustellen.
Wandle eine gegebene ganze Zahl in römische Zahlen um.

Beispiel 1:

Eingabe: num = 3
Ausgabe: „III“
Beispiel 2:

Eingabe: num = 4
Ausgabe: „IV“
Beispiel 3:

Eingabe: num = 9
Ausgabe: "IX"
Beispiel 4:

Eingabe: num = 58
Ausgabe: „LVIII“
Erklärung: L = 50, V = 5, III = 3.
Beispiel 5:

Eingabe: num = 1994
Ausgabe: „MCMXCIV“
Erklärung: M = 1000, CM = 900, XC = 90, IV = 4.
 

Hinweis:

1 <= Zahl <= 3999

class Solution {
    public String intToRoman(int num) {
 int values[] ={1,4,5,9,10,40,50,90,100,400,500,900,1000};
      String roman[]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
        int i=12;
        String Roman="";
        while (num>0){

           if(num>=values[i]){
                num=num-values[i];
                Roman+=roman[i];

            }
           else {
               i--;
           }

        }



        return Roman;

    }
}

8. Gültige Klammern

Bestimmen Sie bei einem String s, der nur '(', ')', '{', '}', '[', ']' enthält, ob der String gültig ist.

Eine gültige Zeichenfolge muss Folgendes erfüllen:

Öffnende Klammern müssen mit schließenden Klammern des gleichen Typs geschlossen werden.
Linke Klammern müssen in der richtigen Reihenfolge geschlossen werden.
 

Beispiel 1:

Eingabe: s = "()"
Ausgabe: true
Beispiel 2:

Eingabe: s = "()[]{}"
Ausgabe: true
Beispiel 3:

Eingabe: s = "(]"
Ausgabe: false
Beispiel 4:

Eingabe: s = "([)]"
Ausgabe: false
Beispiel 5:

Eingabe: s = "{[]}"
Ausgabe: wahr
 

Hinweis:

1 <= s.length <= 104
s besteht nur aus Klammern '()[]{}'

class Solution {
    public boolean isValid(String s) {
  int length = s.length() / 2;
        for (int i = 0; i < length; i++) {
            s = s.replace("()", "").replace("{}", "").replace("[]", "");
        }
        System.out.println(s);

        return s.length() == 0;
    }
}

9. Längstes gemeinsames Präfix

Schreiben Sie eine Funktion, um das längste gemeinsame Präfix in einem Array von Strings zu finden.

Gibt eine leere Zeichenfolge zurück, wenn kein gemeinsames Präfix vorhanden ist  "".

Beispiel 1:

Input: strs = ["flower","flow","flight"]
Output: "fl"
Beispiel 2:

Eingabe: strs = ["dog", "racecar", "car"]
Ausgabe: ""
Erläuterung: Die Eingabe hat kein gemeinsames Präfix.
 

Hinweis:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] besteht nur aus englischen Kleinbuchstaben

class Solution { 

    public String longestCommonPrefix(String[] strs) {

     
        String s="";
        String s2="";
        int num[]=new int[strs.length];
        for(int i=0;i<strs.length;i++){
            num[i]=strs[i].length();
        }
        for (int gap = num.length / 2; gap > 0; gap /= 2) {
            // 从第gap个元素,逐个对其所在的组进行直接插入排序
            for (int i = gap; i < num.length ; i++) {
                int j = i;
                int temp = num[j];
                if (num[j] < num[j - gap]) {
                    while (j - gap >= 0 && temp < num[j - gap]) {
                        //移动
                        num[j] = num[j-gap];
                        j -= gap;
                    }
                    //当退出while后,就给temp找到插入的位置
                    num[j] = temp;
                }

            }
        }

        boolean b=false;
        int sum=0;
        String snum="";
        if(strs.length>1) {
            for (int k = 0; k < num[0]; k++) {

                for (int p = 1; p < strs.length; p++) {
                    if (String.valueOf(strs[0].charAt(k)).equals(String.valueOf(strs[p].charAt(k)))) {
                        b = true;
                        sum++;
                    } else {
                        b = false;
                        sum--;
                          break;
                    }
                }
                if (k == 0) {
                    if (!b) {
                        return "";
                    }
                }
                if(k>0){
                    if (!b) {
                         break;
                    }
                }
                if (b) {
                    snum += String.valueOf(strs[0].charAt(k));
                }
            }
        }
        else {
            snum=strs[0];
        }
      return snum;

    }
}

10. Führen Sie zwei sortierte verknüpfte Listen zusammen

 Führen Sie zwei aufsteigende verkettete Listen zu einer neuen  aufsteigenden  verketteten Liste zusammen und kehren Sie zurück. Die neue verknüpfte Liste wird gebildet, indem alle Knoten der gegebenen zwei verknüpften Listen gespleißt werden.


Beispiel 2:

Eingabe: l1 = [], l2 = []
Ausgabe: []
Beispiel 3:

Eingang: l1 = [], l2 = [0]
Ausgang: [0]
 

Hinweis:

Die Anzahl der Knoten in den beiden verknüpften Listen reicht von [0, 50]
-100 <= Node.val <= 100
l1 und l2 sind in nicht abnehmender Reihenfolge

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  if(l1!=null||l2!=null) {

             List<Integer> list = new ArrayList<>();
             while (true) {
                 if (l1 != null) {
                     list.add(l1.val);
                     if (l1.next == null) {
                         break;
                     }
                     l1 = l1.next;
                 }
                 else {
                     break;
                 }
             }
             while (true) {
                 if (l2 != null) {
                     list.add(l2.val);
                     if (l2.next == null) {
                         break;
                     }
                     l2 = l2.next;
                 }
                 else {
                     break;
                 }
             }


             int temp = 0;
             for (int i = 0; i < list.size() - 1; i++) {

                 for (int j = 0; j < list.size() - 1 - i; j++) {
                     // 如果前面的数比后面的数大,则交换
                     if (list.get(j) < list.get(j + 1)) {

                         temp = list.get(j);
                         list.set(j, list.get(j + 1));
                         list.set(j + 1, temp);
                     }
                 }
             }
             //  list.forEach(System.out::println);
             ListNode listNode[] = new ListNode[list.size()];
             if (list != null) {

                 for (int i = 0; i < list.size(); i++) {
                     if (i == 0) {
                         listNode[i] = new ListNode(list.get(i));
                     } else {
                         listNode[i] = new ListNode(list.get(i), listNode[i - 1]);
                     }

                 }
             }
             return listNode[list.size() - 1];
         }
         else {

             return null;
         }
    }
}

Ich denke du magst

Origin blog.csdn.net/qq_44716544/article/details/120358065
Empfohlen
Rangfolge