96. 链表划分
题目
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
思路
- 简单思路:就是新建两条链表分别存储小于x的和大于x的,然后在将两条链表进行合并即可。
代码
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param: head: The first node of linked list
@param: x: An integer
@return: A ListNode
"""
def partition(self, head, x):
# write your code here
if head is None:return None
#新建两个链表存放小于x和大于x
l1 = head
l2= ListNode(0)
y = l2
l3 = ListNode(0)
z = l3
while l1 :
if l1.val<x:
y.next = l1
y = y.next
else:
z.next = l1
z = z.next
l1 = l1.next
#将大于x的尾部添加None
z.next = None
#将两条链表进行合并
y.next = l3.next
#返回该链表
return l2.next
389. 判断数独是否合法
题目
http://www.lintcode.com/zh-cn/problem/valid-sudoku/
请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用 . 表示。
注意事项
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
思路
- 一开始以为是要判断能不能可解的数独,后面看到注意事项。
- 只需要判断行列和小正方形能够合法即可(没有出现重复数字情况)
代码
class Solution:
"""
@param: board: the board
@return: whether the Sudoku is valid
"""
def isValidSudoku(self, board):
# write your code here
res = set()
res2 =set()
#1判断行列有效
for i in range(9):
for j in range(9):
#行
if board[i][j]!='.' and board[i][j] in res:
return False
else:
res.add(board[i][j])
#列
if board[j][i]!='.' and board[j][i] in res2:
return False
else:
res2.add(board[j][i])
res2.clear()
res.clear()
#2判断每一块有效
#对于九大块
for i in range(0,9,3):
for j in range(0,9,3):
#对于九大块内的一小块
for a in range(i,i+3):
for b in range(j,j+3):
#判断是否有效
if board[a][b]!='.' and board[a][b] in res:
return False
else:
res.add(board[a][b])
#小块判断完即可清空res
res.clear()
return True