thảo luận [Học Tập] Topic thuật toán

  • Người tạo chủ đề Người tạo chủ đề unknowpc90
  • Ngày bắt đầu Ngày bắt đầu
Mấy bác cho em hỏi, làm sao để xử lý chuyển số thành chuỗi theo như logic:
1-26:a-z
27:aa và đến zz là 703, 704 lại quay lại aaa.
Tks các bác!
Tui gặp bài này trên leadcode rồi, bản chất bài này là vd: ZY = 701 = (26) * 26^1 + (25) * 26^0 hay ABC = 731 = (1) * 26^ 2 + (2) * 26^ 1 + (3)* 26^ 0. Từ đó chuyển vào code
 
Tui gặp bài này trên leadcode rồi, bản chất bài này là vd: ZY = 701 = (26) * 26^1 + (25) * 26^0 hay ABC = 731 = (1) * 26^ 2 + (2) * 26^ 1 + (3)* 26^ 0. Từ đó chuyển vào code
Đúng rồi, quy luật nó là vậy mà cứ theo lối chuyển đổi sang hệ cơ số 26. Tks bác!
 
https://leetcode.com/problems/container-with-most-water/

1636642735371.png

1636642749318.png
 
Nhập vào một chuỗi(Chuỗi có thể gồm cả chữ và số)
Lọc chuỗi chỉ lấy ra các số
Tính tổng các số đã lọc ra và in lên màn hình
###
Các cao nhân cho em hỏi bài này phải làm như nào ạ. Em lọc các số trong chuỗi ra bằng lệnh re.findall() nhưng k biết tính tổng làm sao ạ. Em có dùng lệnh Sum nhưng k được ạ.
😭
😭

Mọi người có cách giải nào khác không ạ ( K dùng lệnh re.findall() )
Em cảm ơn mọi người
😘

screenshot_1636716534.png
 
Nhập vào một chuỗi(Chuỗi có thể gồm cả chữ và số)
Lọc chuỗi chỉ lấy ra các số
Tính tổng các số đã lọc ra và in lên màn hình
###
Các cao nhân cho em hỏi bài này phải làm như nào ạ. Em lọc các số trong chuỗi ra bằng lệnh re.findall() nhưng k biết tính tổng làm sao ạ. Em có dùng lệnh Sum nhưng k được ạ.
😭
😭

Mọi người có cách giải nào khác không ạ ( K dùng lệnh re.findall() )
Em cảm ơn mọi người
😘

Xem tệp đính kèm 864802
Đề bài còn chưa rõ thím ơi. Lọc ra các số hay các chữ số?
vd: 456hfg6 thì lấy ra 4,5,6,6 rồi tính tổng hay 456,6 rồi tính tổng?
 
Đề bài còn chưa rõ thím ơi. Lọc ra các số hay các chữ số?
vd: 456hfg6 thì lấy ra 4,5,6,6 rồi tính tổng hay 456,6 rồi tính tổng?
là lấy 4+5+6+6 bác ơi.
Vì em mới học nên chủ yếu là luyên thêm về các thuật toán nên hỏi ngu quá ạ. Bác thông cảm
=((
 
là lấy 4+5+6+6 bác ơi.
Vì em mới học nên chủ yếu là luyên thêm về các thuật toán nên hỏi ngu quá ạ. Bác thông cảm
=((
Cái list hiện tại nó chứa string mà, convert nó sang int rồi dùm sum.
sum(int(x) for x in b)

Mà bài này dùng regex thì chả khác gì dùng dao mổ trâu giết gà, :big_smile:
Như này là được rồi.

Python:
def func(inputStr):
    return sum(int(x) for x in inputStr if x.isdigit())
 
Sửa lần cuối:
Bữa trước làm bài test của một cty. Sau đó search leetcode thì có bài y chang. Anh em nào rảnh thì làm thử.
https://leetcode.com/problems/remove-one-element-to-make-the-array-strictly-increasing/
https://leetcode.com/problems/word-ladder/
:big_smile:

Bài word-ladder mình dùng graph với BFS mà sao nó chỉ nhanh hơn 20% thôi nhỉ, Bác xem giúp có thể tối ưu thêm đoạn nào ko nhỉ?
C++:
#include <queue>
#include <list>

class Solution {
public:
    struct Node
    {
        std::string str;
        int value = -1;
        
        bool visited = false;
        
        std::list<Node*> adj;
    };
    
    bool match(const string& str1, const string& str2)
    {
        int count = 0;
        
        for(int i = 0; i < str1.size(); ++i)
        {
            if(str1[i] != str2[i])
                count++;
        }
        
        return count <= 1;
    }
    
    int ladderLength(string beginWord, string endWord, vector<string>& wordList) {

        std::list<Node*> list;
        
        Node* begin = new Node;
        begin->str = beginWord;
        begin->value = -1;
        begin->visited = false;
        
        list.push_back(begin);
        
        for(const auto& iter : wordList)
        {
            if(iter == beginWord)
                continue;
            
            Node* node = new Node;
            node->str = iter;
            node->value = -1;
            node->visited = false;
            
            list.push_back(node);
        }
        
        for(const auto& iter : list)
        {
            for(const auto& iterInner : list)
            {
                if(iter != iterInner && match(iter->str, iterInner->str))
                {
                    iter->adj.push_back(iterInner);
                }
            }
        }
        
        std::queue<Node*> queue;
        begin->value = 1;
        queue.push(begin);
        
        while(!queue.empty())
        {
            Node* node = queue.front();
            queue.pop();
            
            if(node->visited)
                continue;
            
            node->visited = true;
            
            for(auto& iter : node->adj)
            {
                if(iter->visited)
                    continue;
                
                if(iter->value == -1)
                {
                    iter->value = node->value + 1;
                }
                else
                {
                    iter->value = std::min(iter->value, node->value + 1);
                }
                
                queue.push(iter);
            }
            
        }
        
        int nRet = 0;
        
        for(auto& iter : list)
        {
            if(iter->str == endWord)
            {
                nRet = iter->value;
                break;
            }
        }
        
        for(auto& iter : list)
        {
            if(iter)
            {
                delete iter;
                iter = nullptr;
            }
        }
        
        list.clear();       
        
        return nRet < 0 ? 0 : nRet;
    }
};
 

Thống kê chủ đề

Ngày tạo
unknowpc90,
Người trả lời cuối
Spaghetti Code,
Trả lời
1.460
Lượt xem
154.032
Quay lại
Lên đầu trang