数据结构与算法相关题解20240225
- 一、58. 最后一个单词的长度
- 二、48. 旋转图像
- 三、69. x 的平方根
- 四、50. Pow(x, n)
一、58. 最后一个单词的长度
简单
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = “luffy is still joyboy”
输出:6
解释:最后一个单词是长度为6的“joyboy”。
class S58:
def func(self, s):
r = len(s) - 1
for i in range(len(s) - 1, -1, -1):
if s[i] == " ":
r -= 1
else:
break
l = r
for i in range(l, -1, -1):
if s[i] != " ":
l -= 1
else:
break
return r - l
r = S58()
s = " fly me to the moon "
print(r.func(s))
二、48. 旋转图像
先上下反转
再按照对角线反转
本题采用上下反转
1 2 3 7 8 9
4 5 6 4 5 6
7 8 9 1 2 3
载通过主对角线进行反转
7 4 1
8 5 2
9 6 3
class S48:
def func(self, nums):
n = len(nums)
i = 0
j = n - 1
for m in range(n):
nums[i][m], nums[j][m] = nums[j][m], nums[i][m]
# 对角线进行反转,对下部分进行反转
for x in range(1, n):
for y in range(x):
nums[x][y], nums[y][x] = nums[y][x], nums[x][y]
return nums
r = S48()
nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(r.func(nums))
三、69. x 的平方根
简单
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4
输出:2
示例 2
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
思路:二分查找
class S69:
def func(self,x):
left=0
right=x #任何数的平方根都小于本身
ans=-1
while left<=right:
mid=(left+right)//2
if mid*mid<=x:
ans=mid
left=mid+1
else:
right=mid-1
return ans
r=S69()
x=8
print(r.func(x))
四、50. Pow(x, n)
中等
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
class S50:
def func(self,x,n):
if n<0:
x=1/x
n=-n
res=1
while n:
if n%2==0:
x=x*x
n=n//2
else:
res=res*x
n=n-1
return res
r=S50()
x = 2.00000
n = 3
print(r.func(x, n))