66、加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。示例 2:
输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。示例 3:
输入:digits = [9] 输出:[1,0] 解释:输入数组表示数字 9。 加 1 得到了 9 + 1 = 10。 因此,结果应该是 [1,0]。
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
list0=''
for i in digits:
list0+=str(i)
list0=str(int(list0)+1)
result=[]
for i in list0:
result.append(int(i))
return result
1822、数组元素积的符号
已知函数
signFunc(x)
将会根据x
的正负返回特定值:
- 如果
x
是正数,返回1
。- 如果
x
是负数,返回-1
。- 如果
x
是等于0
,返回0
。给你一个整数数组
nums
。令product
为数组nums
中所有元素值的乘积。返回
signFunc(product)
。示例 1:
输入:nums = [-1,-2,-3,-4,3,2,1] 输出:1 解释:数组中所有值的乘积是 144 ,且 signFunc(144) = 1示例 2:
输入:nums = [1,5,0,2,-3] 输出:0 解释:数组中所有值的乘积是 0 ,且 signFunc(0) = 0示例 3:
输入:nums = [-1,1,-1,1,-1] 输出:-1 解释:数组中所有值的乘积是 -1 ,且 signFunc(-1) = -1
class Solution(object):
def arraySign(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
flag=1
for i in nums:
if i==0:
return 0
if i<0:
flag=-flag
return flag
1502、判断能否形成等差数列
给你一个数字数组
arr
。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
如果可以重新排列数组形成等差数列,请返回
true
;否则,返回false
。示例 1:
输入:arr = [3,5,1] 输出:true 解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。示例 2:
输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列。
class Solution(object):
def canMakeArithmeticProgression(self, arr):
"""
:type arr: List[int]
:rtype: bool
"""
length=len(arr)
if length<=2:
return True
arr.sort()
dist=arr[1]-arr[0]
for i in range(2,length):
dist_new=arr[i]-arr[i-1]
if dist_new!=dist:
return False
return True
896、单调数列
如果数组是单调递增或单调递减的,那么它是 单调 的。
如果对于所有
i <= j
,nums[i] <= nums[j]
,那么数组nums
是单调递增的。 如果对于所有i <= j
,nums[i] >= nums[j]
,那么数组nums
是单调递减的。当给定的数组
nums
是单调数组时返回true
,否则返回false
。
示例 1:
输入:nums = [1,2,2,3] 输出:true示例 2:
输入:nums = [6,5,4,4] 输出:true示例 3:
输入:nums = [1,3,2] 输出:false
法一:
class Solution(object):
def isMonotonic(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
return True if sorted(nums)==nums or sorted(nums,reverse=True)==nums else False
法二:
class Solution(object):
def isMonotonic(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
length=len(nums)
if length<=2:
return True
flag=0
for i in range(1,length):
if flag==0:
if nums[i]>nums[i-1]:
flag=1
elif nums[i]<nums[i-1]:
flag=-1
if flag==1:
if nums[i]<nums[i-1]:
return False
if flag==-1:
if nums[i]>nums[i-1]:
return False
return True
13、罗马数字转整数
罗马数字包含以下七种字符:
I
,V
,X
,L
,C
,D
和M
。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如, 罗马数字
2
写做II
,即为两个并列的 1 。12
写做XII
,即为X
+II
。27
写做XXVII
, 即为XX
+V
+II
。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做
IIII
,而是IV
。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX
。这个特殊的规则只适用于以下六种情况:
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。给定一个罗马数字,将其转换成整数。
法一:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dict_char={'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000}
sum_value=0
length=len(s)
right_value=0
for i in range(length-1,-1,-1):
if dict_char[s[i]]<right_value:
sum_value-=dict_char[s[i]]
else:
sum_value+=dict_char[s[i]]
right_value=dict_char[s[i]]
return sum_value
法二:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dict_char={'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000}
sum_value=0
length=len(s)
for i in range(1,length):
if dict_char[s[i-1]]<dict_char[s[i]]:
sum_value-=dict_char[s[i-1]]
else:
sum_value+=dict_char[s[i-1]]
sum_value+=dict_char[s[length-1]]
return sum_value