面試題-python3 按規律寫出下一個數1, 11, 21, 1211, 111221


python測開面試題

觀察下面數字的規律
1
11
21
1211
111221

第一項是數字 1
描述前一項,這個數是 1 即 “ 1 個 1 ”,記作 “11”
描述前一項,這個數是 11 即 “ 2 個 1 ” ,記作 “21”
描述前一項,這個數是 21 即 “ 1 個 2 ,1 個 1 ” ,記作 “1211”
描述前一項,這個數是 1211 即 “ 1個 1 , 1個 2 , 2 個 1 ” ,記作 “111221”

用Python實現前N(N=10)個

先得到一個數字

以a=111221為例,得到下一個312211

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

# 描述一段數字
a = '111221'
# 先切分成連續的 ['111', '22', '1']
b = []
temp = ''
for i in a:
    if len(temp)==0:
        temp += i
    else:
        if i == temp[-1]:
            temp += i
        else:
            b.append(temp)
            temp = i
else:
    # for循環結束后執行這句,最后的temp需添加過去
    if len(temp):
        b.append(temp)
print(b)     # 得到 ['111', '22', '1']
# 字符串描述['111', '22', '1']
str_a = ''
for i in b:
    str_a += str(len(i))+i[0]
print(str_a)  # 得到312211

迭代器解決

這題跟斐波那契數列有點像,每個數字都是在前面一個數字基礎上生成的下一個數。
python迭代器可以生成下一個數,參考前面的斐波那契數列https://www.cnblogs.com/yoyoketang/p/14459595.html

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

class NextNumbers:

    def __iter__(self):
        self.a = '1'
        self.count = 0
        return self

    def __next__(self):
        self.count += 1
        if self.count == 1:  # 第一次迭代
            return self.a
        b = []
        temp = ''
        for i in self.a:
            if len(temp)==0:
                temp += i
            else:
                if i == temp[-1]:
                    temp += i
                else:
                    b.append(temp)
                    temp = i
        else:
            # for循環結束后執行這句,最后的temp需添加過去
            if len(temp):
                b.append(temp)
        # print(b)     # 得到 ['111', '22', '1']
        # 字符串描述['111', '22', '1']
        str_a = ''
        for i in b:
            str_a += str(len(i))+i[0]
        self.a = str_a
        if self.count <= 10:
            return self.a
        else:
            raise StopIteration

myclass = NextNumbers()
myiter = iter(myclass)
# for 遍歷輸出前10
for i in myiter:
    print(i)

運行結果:

1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM