פיז באז


רמת קושי קַל
נשאל לעתים קרובות בלומברג מיקרוסופט
מחרוזת

שם הבעיה עשוי להיראות מטושטש. פיז באז הוא משחק איתו מלמדים ילדים על החלוקה. לכן, בלי טרחה רבה בואו ננקה את הבאז סביבו.

הצהרת בעיה

תן לנו לכתוב תוכנית שבה למכפילים של 3 אתה מדפיס "Fizz", עבור הכפולות של 5 "Buzz" ו- FizzBuzz עבור מכפילים של שניהם.

פיז באז
מציג את FizzBuzz למשך 1-21

זו בעיה בסיסית ויותר כמו שהיא יכולה להיות הביט ב.

גישה -1

כוח פראי

  • ניתן מספר n
    • הפעל לולאה מ -1 עד n
    • אם ניתן לחלק את המספר ב- 15. הדפס את FizzBuzz
    • אחרת אם המספר מתחלק ב 3. הדפס פיז
    • אחרת ניתן לחלק מספר באמצעות 3. הדפסת באז

וואלה, יש לנו את הקוד של FizzBuzz! הבה נבדוק את הקוד.

קוד Java לפיז באז

class Solution 
{
    public List<String> fizzBuzz(int n) 
    {
    List<String>lisa=new ArrayList<String>();
    for(int i=1;i<n+1;i++)
    {
       if(i%15==0)
           lisa.add("FizzBuzz");
        else if(i%5==0)
            lisa.add("Buzz");
        else if(i%3==0)
            lisa.add("Fizz");
        else
            lisa.add(Integer.toString(i));
    }
    return lisa;
    }
}

קוד C + + עבור Fizz Buzz

#include<string>
class Solution 
{
public:
    vector<string> fizzBuzz(int n) 
    {
    vector<string>lisa;
    for(int i=1;i<n+1;i++)
    {
       if(i%15==0)
           lisa.push_back("FizzBuzz");
        else if(i%5==0)
            lisa.push_back("Buzz");
        else if(i%3==0)
            lisa.push_back("Fizz");
        else
            lisa.push_back(to_string(i));
    }
    return lisa;
    }
};

ניתוח מורכבות

מורכבות זמן = O (n) כאשר n הוא המספר עד שעלינו להדפיס את הערכים בצורה של fizz buzz.

מורכבות חלל = O (1) מכיוון שאנו לא משתמשים כאן במרחב עזר.

גישה -2

מחרוזת שרשור

שיטה זו לא תעזור בזמן הריצה אך בהחלט תעזור בחיתוך בשורות הקוד ובבעיות בתנאים נוספים.

הקורא יכול לחקור אותי עכשיו. אילו תנאים נוספים?

נניח שאנו משנים את הבעיה מ- FizzBuzz ל- FizzBuzzLizz.

  • הדפיס את Fizz בכל פעם שאתה נתקל במכפיל של 3
  • פלט באז בכל פעם שאנחנו רואים מכפיל של 5
  • הדפיס את ליז עם כל הופעה של מכפילים של 7
  • הוסף את FizzBuzz למכפילים של 3 ו -5
  • FizzLizz למכפילים של 3 ושל 7
  • הדפיס את BuzzLizz כשאנחנו נתקלים בכפולות של 5 ו- 7

האם זה לא מוביל ליותר מדי אם ואחרים?

כל דרך להימלט מזה. כן!

אנו לוקחים מחרוזת כל איטרציה וממשיכים להוסיף לה.

  • הפעל לולאה מ -1 עד n.
    • אנו שומרים את התשובה במחרוזת ans = "";
    • עבור כל i
      • הוסף את Fizz למחרוזת אם המספר הוא כפול של 3
      • לשרשר את באז אם המספר הוא כפול של 5
      • סיכמו את ליז למחרוזת אם המספר הוא מכפיל של 7
      • כך יוצרים את FizzBuzz Lizz אם המספר הוא מכפיל מכל 3,5 ו- 7
    • זרוק את המחרוזת שנוצרה ל- ArrayList או לכל מבנה נתונים אחר שבו השתמשת

עדיף נכון? בואו נבדוק את הקוד:

קוד Java לפיז באז

class Solution 
{
    public List<String> fizzBuzz(int n) 
    {
    List<String>lisa=new ArrayList<String>();
    for(int i=1;i<n+1;i++)
    {
        String ans=""; 
        if(i%5==0) 
        ans=ans+"Buzz"; 
        if(i%3==0) 
        ans=ans+"Fizz";
        else 
        ans=ans+Integer.toString(i); 
        lisa.add(ans);
    }
    return lisa;
    }
}

קוד C + + עבור Fizz Buzz

#include<string>
class Solution 
{
public:
    vector<string> fizzBuzz(int n) 
    {
    vector<string>lisa;
    for(int i=1;i<n+1;i++)
    {
       string ans="";
       if(i%5==0)
            ans=ans+"Buzz";
       if(i%3==0)
            ans=ans+"Fizz";
        else
            ans=ans+to_string(i);
        lisa.push_back(ans);
    }
    return lisa;
    }
};

ניתוח מורכבות

מורכבות הזמן של הפיתרון שלמעלה: O (n) כאשר n הוא המספר עד שנצטרך להדפיס את הערכים בצורה של fizz buzz.

מורכבות הזמן של הפתרון הנ"ל:

הפניות