打印从1到最大的n位数
主要的考点:n可能很大,大到int甚至long int都会溢出,怎么解决?
网上看了几个题解,没看懂,看懂了一个思路最简单的:
从1到n按顺序打印出从1到最大的n十进制数,其实就是n个从0到9的全排列(把数字在0之前的去掉)
//打印1到最大的n位数的主方法
public void printToMaxOfDigits(int n){
if(n <= 0){
System.out.println("输入的n没有意义");
return;
}
char number[] = new char[n];
for (int i = 0; i < number.length; i++) {
number[i] = '0';
}
for (int i = 0; i < 10; ++i) {
number[0] = (char) (i + '0');
printToMaxOfNDigitsRecursively(number, n, 0);
}
}
//利用递归实现1到最大的n位数的全排列
public void printToMaxOfNDigitsRecursively(char[] number, int n, int index) {
if(index == n - 1){
printNumber(number);
return;
}
for (int i = 0; i < 10; ++i) {
number[index + 1] = (char) (i + '0');
printToMaxOfNDigitsRecursively(number, n, index + 1);
}
}
//输出
private void printNumber(char[] number) {
boolean isBeginning0 = true;
int nLength = number.length;
for (int i = 0; i < nLength; ++i) {
if(isBeginning0 && number[i]!='0'){
isBeginning0 = false;
}
if(!isBeginning0){
System.out.print(number[i]);
}
}
System.out.println();
}
删除链表的节点
public class sortArrayByOddEven { //需要额外定义一个类ListNode题目有给出
public static void main(String[] args) {
ListNode pHead = new ListNode(1);
ListNode pAhead = new ListNode(3);
ListNode pBhead = new ListNode(5);
ListNode pChead = new ListNode(7);
pHead.next = pAhead;
pAhead.next = pBhead;
pBhead.next = pChead;
deleteNode(pHead,pBhead);
while (pHead != null) {
System.out.print(pHead.value + ",");
pHead = pHead.next;
}
}
private static void deleteNode(ListNode pHead, ListNode pBhead) {
if(pHead==null||pBhead==null) //当头指针为空,或者删除节点为空时
return ;
ListNode pNode = pHead;
if(pNode.next==null) {
while(pNode.next!=pBhead) {
pNode = pNode.next;
}
pNode.next = null;
}else { //我们直接让删除节点的值等于删除节点的下一个节点值
//再将删除节点的next赋值为 deleNode(删除节点).next.next 起到间接删除的效果
pBhead.value = pBhead.next.value;
pBhead.next = pBhead.next.next;
}
}
}
CF-Code
发布了16 篇原创文章 · 获赞 1 · 访问量 1210
私信
关注