本帖最后由 阿奇_o 于 2022-6-4 10:01 编辑
嗯,思路我想通常至少有两点吧:
1. 因为字符串是"不可变的"数据类型,所以字符串通常要结合列表来方便操作(如转为列表,或用另一个列表来做临时存储或中间变量)
2. m行n列,或N行N列,这些矩阵,基本上都要遍历,所以通常 就是两个for循环进行遍历。
其次,就是具体看题目怎么要求,注意 观察下标和元素的变化规律,以及下标之间的关系;注意+1还是-1 ;注意边界(走到最后下标是否越界)
比如,这里的"对角线",其实就是每行的"列号/下标"有着这样的固定关系: row[ i ] = row[len(s)-1-i] = '*' (你直接试算一下就知道了,第一行是0,4,第二行是1,3,。。)
所以,
- def func(s):
- for i in range(len(s)): # 作为行号,也作为 字符串的下标
- for j in range(len(s)): # 作为列号
- row = [s[i],] * len(s) # 先全部设为
- row[i] = row[len(s)-i-1] = '*' # 再修改(隐去)指定位置的字符
- print(''.join(row))
-
- func(s='12Aab')
- *111*
- 2*2*2
- AA*AA
- a*a*a
- *bbb*
- ---------------
- #复盘: 这里嵌套的for j in ... 其实是多余的(会在相同位置上"修改"),所以 最终应该是:
- def f(s):
- for i in range(len(s)):
- row = [s[i],] * len(s)
- row[i] = row[len(s)-1-i] = '*'
- print(''.join(row))
-
复制代码