【Leetcode】Exam Bank - 簡単な質問 (1)

目次

前に書かれています:

タイトル: 67. 二項和 - Leetcode

問題解決のアイデア:

コード:

オーバー、オーバー、オーバー、オーバー!! ! !

トピック: 83. 並べ替えられたリンク リスト内の重複する要素を削除する - Leetcode

問題解決のアイデア:

コード:

オーバー、オーバー、オーバー、オーバー!! ! !

最後に書く:


前に書かれています:

勉強に疲れていても、落ち込んでいても、人生に満足していなくても、恋に落ちても、私と一緒に来て、人生のストレスを手放してください.

心配しないで、LeetCode を開き、質問バンクをクリックして、簡単な質問を選択し、このリンクをクリックして、私と一緒に質問をブラッシングする喜びを楽しんでください!

タイトル: 67. 二項和 - Leetcode

問題解決のアイデア:

この質問は実際には、コードを使用してバイナリ操作をシミュレートしてみましょう。

では二進数での数え方を考えてみましょう。

小学校の数学の知識によると、2 つの数の足し算は左から右に計算する必要があります。

各ビットの加算値がベースより大きい場合、キャリー、

2 つの 2 進数のサイズの違いによる 1 つの数値の加算を防ぐために、

もう1つはまだ追加されていませんが、

1. 最初に 2 つの数値の長さを計算し、小さい方の数値をゼロで埋めて、2 つの数値の長さを等しくします。

2.次に、左から右に追加します。追加された値を運ぶ必要がある場合は、それを運びます

コードは次のとおりです。

コード:

class Solution {
public:
    string addBinary(string a, string b) {
        //计算他们的长度
        int alen = a.size();
        int blen = b.size();

        //在短的字符串前补零,让他们等长,之后好比较计算
        while(alen < blen)
        {
            a = '0' + a;
            alen++;
        }
        while(alen > blen)
        {
            b = '0' + b;
            blen++;
        }

        //从后往前遍历字符串,并相加进位
        for(int j = a.size() - 1; j > 0; j--)
        {
            a[j] = a[j] - '0' + b[j];
            if(a[j] > '1')
            {
                a[j] = (a[j] - '0') % 2 + '0';
                a[j - 1] = a[j - 1] + 1;
            }
        }

        //字符串第零位单独操作,相加
        a[0] = a[0] - '0' + b[0];

        //进位
        if(a[0] > '1')
        {
            a[0] = (a[0] - '0') % 2 + '0';
            a = '1' + a;
        }
        return a;
    }
};

オーバー、オーバー、オーバー、オーバー!! ! !

トピック: 83. 並べ替えられたリンク リスト内の重複する要素を削除する - Leetcode

問題解決のアイデア:

したがって、この質問は、リンクされたリストの重複を削除することです.

次に、簡単な問題として、

私の提案は、あなたの頭脳を使わないことです。

考えずに連結リストを直接トラバースし、出現した数字で新しい連結リストを作成します。

タイトルにソートされた配列と書いてあるので、繰り返される数字がつながっているので、

繰り返し挿入を防ぐために、その番号が繰り返されるかどうかを一時的に記録するだけで済みます。

個人的には、歩哨の位置をとり、尾を差し込むのが好きですが、それを取るかどうかは、個人の習慣に依存します。

最後に、新しい連結リストの先頭を返すだけです。

コードは次のとおりです。

コード:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        //判断空链表
        if(!head)
        {
            return nullptr;
        }

        //建一个哨兵位的头结点
        ListNode* newhead = new ListNode;

        //cur用来遍历原链表
        ListNode* cur = head;

        //先头插一个数据
        newhead->next = cur;

        //prev用来遍历新链表
        ListNode* prev = cur;

        //遍历原链表
        while(cur)
        {
            //如果节点的值重复就继续遍历,如果不同就尾插进新链表
            if(cur->val != prev->val)
            {
                prev->next = cur;
                prev = prev->next;
            }
            cur = cur->next;
        }

        //尾结点指向空
        prev->next = nullptr;

        //换头(其实可以不换的啦)
        head = newhead->next;
        return head;
    }
};

オーバー、オーバー、オーバー、オーバー!! ! !

最後に書く:

以上がこの記事の内容です、お読みいただきありがとうございます。

この記事が気に入ったら、いいねとコメントをお願いします。また、ご意見をお書きください。

私と一緒にプログラミングを学びたい場合は、私に従ってください。私たちは一緒に学び、成長します。

今後もより質の高いコンテンツを出力していきますので、よろしくお願いします。

おすすめ

転載: blog.csdn.net/Locky136/article/details/130040333