LintCode算法题解——判断数独是否合法、平面列表、克隆二叉树、序列排号
2017-09-18 09:48
381 查看
判断数独是否合法
请判定一个数独是否有效。该数独可能只填充了部分数字,其中缺少的数字用 . 表示。
注意事项
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。样例
算法
public class Solution { /* * @param board: the board * @return: whether the Sudoku is valid */ public boolean isValidSudoku(char[][] board) { // write your code here boolean[] index = new boolean[9]; for(int j = 0; j<9; j++){ Arrays.fill(index, false); for(int i = 0; i<9; i++){ if(!checkSudoku(index, board[j][i])) return false; } } for(int i = 0; i<9; i++){ Arrays.fill(index, false); for(int j = 0; j<9; j++){ if(!checkSudoku(index, board[i][j])) return false; } } for(int i=0; i<9; i=i+3){ for(int j = 0; j<9; j=j+3){ Arrays.fill(index, false); for(int k = 0; k<9; k++){ if(!checkSudoku(index, board[i+k/3][j+k%3])) return false; } } } return true; } public boolean checkSudoku(boolean[] index, char num){ if(num == '.') return true; int _num = num-'0'; if(num>9||num<0||index[_num-1]) return false; index[_num-1] = true; return true; } }
平面列表
给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。样例
给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。
算法
使用递归/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * * // @return true if this NestedInteger holds a single integer, * // rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, * // if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, * // if it holds a nested list * // Return null if this NestedInteger holds a single integer * public List<NestedInteger> getList(); * } */ public class Solution { // @param nestedList a list of NestedInteger // @return a list of integer public List<Integer> flatten(List<NestedInteger> nestedList) { // Write your code here List<Integer> list = new ArrayList<Integer>(); for(NestedInteger ele:nestedList){ if(ele.isInteger()) list.add(ele.getInteger()); else list.addAll(flatten(ele.getList())); } return list; } }
克隆二叉树
深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品
样例
给定一颗二叉树1 / \ 2 3 / \ 4 5 => 1 / \ 2 3 / \ 4 5
算法
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree * @return root of new tree */ public TreeNode cloneTree(TreeNode root) { // Write your code here if(root==null) return null; TreeNode _root = new TreeNode(root.val); if(root.left!=null) _root.left = cloneTree(root.left); if(root.right!=null) _root.right = cloneTree(root.right); return _root; } }
序号排列
排列序号给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。
样例
例如,排列[1,2,4]是第1个排列。算法
原谅我一开始题目意思都没有理解。对于一个数321,三个数的排列有3!种,知道第一个数,排列有2!种,知道第二个数,排列有1!知道第三个数,排列有0!;
第一位后小于第一位的数为x,第二位后小于第二位的数有y,第三位后为0,所以最后排列序号的结果为index = x*2!+y*1!。
public class Solution { /* * @param A: An array of integers * @return: A long integer */ public long permutationIndex(int[] A) { // write your code here long index = 0; //long _middle = 0; long middle = 1; long num = 0; for(int i=0;i<A.length;i++){ for(int m=A.length-i-1;m>0;m--) middle = middle*m; for(int j=i+1;j<A.length;j++){ if(A[i]>A[j]) num=num+1; } index = index + num*middle; num = 0; middle = 1; //_middle = 0; } return index+1; }
}
相关文章推荐
- 判断二叉树的后序遍历序列是否合法
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列---bfs判断又向图的无环问题
- [SDUT](2140)图结构练习——判断给定图是否存在合法拓扑序列 ---拓扑排序(图)
- 二叉树——判断整数序列是否为二叉搜索树的后序序列
- LintCode389.判断数独是否合法
- 判断数独是否合法-LintCode
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- leetcode之二叉树类之二叉树中序遍历运用-----OJ173/230/98/99/285 二叉树迭代器/BST第K小元素/判断BST是否合法/恢复BST/二叉树下个节点
- 数据结构--判断栈的弹出序列是否合法
- SDUT2104图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 2140 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- sdut oj2140 图结构练习——判断给定图是否存在合法拓扑序列