LeetCode记录

日志

【2021-3-2】

9. 回文数

  • 判断对错
  • 考虑临界情况。
  • 考虑奇偶情况。

13. 罗马数字转整数

  • 按规则转换输入
  • 关联容器map
  • 从特殊情况入手,分类讨论。

剑指 Offer 03. 数组中重复的数字

  • 关联容器
  • 有空间复杂度为O(1)的做法

【2021-3-3】

剑指 Offer 04. 二维数组中的查找

  • 缩小搜索范围
  • size()函数返回的size_type是无符号整数
  • 临界情况:m,n=0

【2021-3-9】

剑指 Offer 06. 从尾到头打印链表

我的做法是遍历链表一次,将数据从头到尾存入数组;然后将数组翻转。

class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        vector<int> data;
        while(head != NULL){
            data.push_back(head -> val);
            head = head -> next;
        }
        int tmp;
        for(auto x =0; x != data.size() / 2; ++x){
            tmp = data[x];
            data[x] = data[data.size() - 1 - x];
            data[data.size() - 1 - x] = tmp;
        }
        return data;
    }
};
  • 遍历链表的基本写法。循环到当前指针为NULL.
  • 翻转数组的基本写法。无论奇偶,循环到数组长度length/2的位置,交换前后的数据。
    其他解法:
    容易想到基于栈来实现,而递归在本质上就是一个栈结构,所以有可以用递归来实现。用栈更稳定。
class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        if(head == NULL){
            return {};
        }

        vector<int> data = reversePrint(head->next);
        data.push_back(head->val);
        return data;
    }
};

总结

时间/空间复杂度

  • 看程序中的循环
  • 循环实际执行次数与n的关系
posted @ 2021-03-06 14:37  tofengz  阅读(48)  评论(0编辑  收藏  举报